From 3aa1892121aa25357aa5cf5f78bcc48c967568c7 Mon Sep 17 00:00:00 2001
From: Chris Boden <cboden@gmail.com>
Date: Sun, 13 Apr 2014 12:09:16 -0400
Subject: [PATCH 1/6] [hhvm] remove session serialize handler hack

---
 src/Ratchet/Session/SessionProvider.php | 9 +--------
 1 file changed, 1 insertion(+), 8 deletions(-)

diff --git a/src/Ratchet/Session/SessionProvider.php b/src/Ratchet/Session/SessionProvider.php
index 8aefc96..a8495b2 100644
--- a/src/Ratchet/Session/SessionProvider.php
+++ b/src/Ratchet/Session/SessionProvider.php
@@ -56,14 +56,7 @@ class SessionProvider implements MessageComponentInterface, WsServerInterface {
         $this->setOptions($options);
 
         if (null === $serializer) {
-            // Temporarily fixing HHVM issue w/ reading ini values
-            $handler_name = ini_get('session.serialize_handler');
-            if ('' === $handler_name) {
-                trigger_error('ini value session.seralize_handler was empty, assuming "php" - tmp hack/fix, bad things might happen', E_USER_WARNING);
-                $handler_name = 'php';
-            }
-
-            $serialClass = __NAMESPACE__ . "\\Serialize\\{$this->toClassCase($handler_name)}Handler"; // awesome/terrible hack, eh?
+            $serialClass = __NAMESPACE__ . "\\Serialize\\{$this->toClassCase(ini_get('session.serialize_handler'))}Handler"; // awesome/terrible hack, eh?
             if (!class_exists($serialClass)) {
                 throw new \RuntimeException('Unable to parse session serialize handler');
             }

From c089aea8ebad521795610feb36bc7a937794a88c Mon Sep 17 00:00:00 2001
From: Marc Easen <marc.easen@everythingeverywhere.com>
Date: Wed, 16 Apr 2014 13:11:40 +0100
Subject: [PATCH 2/6] Fixed a memory leak when a connection is closed the
 topics should also be removed if they are empty

---
 src/Ratchet/Wamp/TopicManager.php    | 7 +++++--
 tests/unit/Wamp/TopicManagerTest.php | 7 +++++++
 2 files changed, 12 insertions(+), 2 deletions(-)

diff --git a/src/Ratchet/Wamp/TopicManager.php b/src/Ratchet/Wamp/TopicManager.php
index bceee73..a69e315 100644
--- a/src/Ratchet/Wamp/TopicManager.php
+++ b/src/Ratchet/Wamp/TopicManager.php
@@ -77,8 +77,11 @@ class TopicManager implements WsServerInterface, WampServerInterface {
     public function onClose(ConnectionInterface $conn) {
         $this->app->onClose($conn);
 
-        foreach ($this->topicLookup as $topic) {
-            $topic->remove($conn);
+        foreach ($this->topicLookup as $topic => $storage) {
+            $storage->remove($conn);
+            if (0 === $storage->count()) {
+                unset($this->topicLookup[$topic]);
+            }
         }
     }
 
diff --git a/tests/unit/Wamp/TopicManagerTest.php b/tests/unit/Wamp/TopicManagerTest.php
index 0c31d9a..7439064 100644
--- a/tests/unit/Wamp/TopicManagerTest.php
+++ b/tests/unit/Wamp/TopicManagerTest.php
@@ -166,12 +166,19 @@ class TopicManagerTest extends \PHPUnit_Framework_TestCase {
         $method = $class->getMethod('getTopic');
         $method->setAccessible(true);
 
+        $attribute = $class->getProperty('topicLookup');
+        $attribute->setAccessible(true);
+
         $topic = $method->invokeArgs($this->mngr, array($name));
 
+        $this->assertCount(1, $attribute->getValue($this->mngr));
+
         $this->mngr->onSubscribe($this->conn, $name);
         $this->mngr->onClose($this->conn);
 
         $this->assertFalse($topic->has($this->conn));
+
+        $this->assertCount(0, $attribute->getValue($this->mngr));
     }
 
     public function testOnErrorBubbles() {

From 8dd1fd8882dde5ff350eab1d7fbd6dcf0298a94d Mon Sep 17 00:00:00 2001
From: Chris Boden <cboden@gmail.com>
Date: Sat, 19 Apr 2014 13:43:09 -0400
Subject: [PATCH 3/6] [Sessions] Attempt to set ini vars for CI to fix HHVM

---
 .travis.yml      | 1 +
 tests/config.ini | 2 ++
 2 files changed, 3 insertions(+)
 create mode 100644 tests/config.ini

diff --git a/.travis.yml b/.travis.yml
index 2c7bef4..611c0ea 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,4 +11,5 @@ matrix:
     - php: hhvm
 
 before_script:
+  - phpenv config-add tests/config.ini
   - composer install --dev --prefer-source
diff --git a/tests/config.ini b/tests/config.ini
new file mode 100644
index 0000000..be28dd1
--- /dev/null
+++ b/tests/config.ini
@@ -0,0 +1,2 @@
+session.serialize_handler = php
+

From b4dda40ba45a8a8c08ed6b82ec78a1122ef42995 Mon Sep 17 00:00:00 2001
From: Chris Boden <cboden@gmail.com>
Date: Sat, 19 Apr 2014 13:56:21 -0400
Subject: [PATCH 4/6] [Sessions][HHVM] Another attempt to pass CI tests

---
 .travis.yml      | 2 +-
 tests/config.ini | 2 --
 2 files changed, 1 insertion(+), 3 deletions(-)
 delete mode 100644 tests/config.ini

diff --git a/.travis.yml b/.travis.yml
index 611c0ea..30f5601 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -11,5 +11,5 @@ matrix:
     - php: hhvm
 
 before_script:
-  - phpenv config-add tests/config.ini
+  - sh -c 'if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then echo "session.serialize_handler = php" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi;'
   - composer install --dev --prefer-source
diff --git a/tests/config.ini b/tests/config.ini
deleted file mode 100644
index be28dd1..0000000
--- a/tests/config.ini
+++ /dev/null
@@ -1,2 +0,0 @@
-session.serialize_handler = php
-

From 4100daef7a8af71534f87e3bb8b42e768650178f Mon Sep 17 00:00:00 2001
From: Chris Boden <cboden@gmail.com>
Date: Sat, 3 May 2014 10:24:38 -0400
Subject: [PATCH 5/6] [tests] Added hhvm-nightly to travis builds

---
 .travis.yml | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/.travis.yml b/.travis.yml
index 30f5601..e3bd916 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,10 +5,12 @@ php:
   - 5.4
   - 5.5
   - hhvm
+  - hhvm-nightly
 
 matrix:
   allow_failures:
     - php: hhvm
+    - php: hhvm-nightly
 
 before_script:
   - sh -c 'if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then echo "session.serialize_handler = php" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi;'

From 20c55be5132a1bf41de9328dec4b0fb046a1b5f0 Mon Sep 17 00:00:00 2001
From: Chris Boden <cboden@gmail.com>
Date: Sat, 3 May 2014 10:27:43 -0400
Subject: [PATCH 6/6] [tests] Removed hhvm-nightly due to build error

---
 .travis.yml | 2 --
 1 file changed, 2 deletions(-)

diff --git a/.travis.yml b/.travis.yml
index e3bd916..30f5601 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -5,12 +5,10 @@ php:
   - 5.4
   - 5.5
   - hhvm
-  - hhvm-nightly
 
 matrix:
   allow_failures:
     - php: hhvm
-    - php: hhvm-nightly
 
 before_script:
   - sh -c 'if [ "$TRAVIS_PHP_VERSION" != "hhvm" ]; then echo "session.serialize_handler = php" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi;'