]> git.ipfire.org Git - thirdparty/tornado.git/commitdiff
Fix memory leak in Semaphore. 1356/head
authorA. Jesse Jiryu Davis <jesse@mongodb.com>
Sat, 28 Feb 2015 18:44:27 +0000 (13:44 -0500)
committerA. Jesse Jiryu Davis <jesse@mongodb.com>
Sat, 28 Feb 2015 18:44:27 +0000 (13:44 -0500)
tornado/locks.py
tornado/test/locks_test.py

index 1367e1de89e8a25762a8b4c30067f199592be1d4..684945a8fbc7695e88b10a63b5cbee1a662a573b 100644 (file)
@@ -181,7 +181,8 @@ class Semaphore(object):
     def release(self):
         """Increment the counter and wake one waiter."""
         self._value += 1
-        for waiter in self._waiters:
+        while self._waiters:
+            waiter = self._waiters.popleft()
             if not waiter.done():
                 self._value -= 1
 
index 29d80b94fd29cbcc7cc2e33bebfff82da34516b0..44dbcf736882aba2ff87d2a3f89e09c3080aeef9 100644 (file)
@@ -248,6 +248,7 @@ class SemaphoreTest(AsyncTestCase):
         sem.release()
         # Now acquire() is instant.
         self.assertTrue(sem.acquire().done())
+        self.assertEqual(0, len(sem._waiters))
 
     @gen_test
     def test_acquire_timeout(self):