From: A. Jesse Jiryu Davis Date: Sat, 28 Feb 2015 18:44:27 +0000 (-0500) Subject: Fix memory leak in Semaphore. X-Git-Tag: v4.2.0b1~88^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=refs%2Fpull%2F1356%2Fhead;p=thirdparty%2Ftornado.git Fix memory leak in Semaphore. --- diff --git a/tornado/locks.py b/tornado/locks.py index 1367e1de8..684945a8f 100644 --- a/tornado/locks.py +++ b/tornado/locks.py @@ -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 diff --git a/tornado/test/locks_test.py b/tornado/test/locks_test.py index 29d80b94f..44dbcf736 100644 --- a/tornado/test/locks_test.py +++ b/tornado/test/locks_test.py @@ -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):