Commit b58de151 authored by Russell Keith-Magee's avatar Russell Keith-Magee
Browse files

Fixed #7339 -- Added manual calls to the garbage collector. This is required...

Fixed #7339 -- Added manual calls to the garbage collector. This is required for PyPy and Jython; these implementations don't use reference counting, so you can't rely on __del__ being run immediately after del is called. Thanks to Maciej Fijalkowski (fijal) and Leo Soto.

git-svn-id: http://code.djangoproject.com/svn/django/trunk@8004 bcc190cf-cafb-0310-a4f2-bffc1f526a37
parent 2f49d180
Loading
Loading
Loading
Loading
+17 −1
Original line number Diff line number Diff line
@@ -2,6 +2,18 @@ from django.dispatch.dispatcher import *
from django.dispatch import dispatcher, robust
import unittest
import copy
import sys
import gc

if sys.platform.startswith('java'):
    def garbage_collect():
        """Run the garbage collector and wait a bit to let it do his work"""
        import time
        gc.collect()
        time.sleep(0.1)
else:
    def garbage_collect():
        gc.collect()

def x(a):
    return a
@@ -21,6 +33,7 @@ class DispatcherTests(unittest.TestCase):
    
    def setUp(self):
        # track the initial state, since it's possible that others have bleed receivers in
        garbage_collect()
        self.sendersBack = copy.copy(dispatcher.sendersBack)
        self.connections = copy.copy(dispatcher.connections)
        self.senders = copy.copy(dispatcher.senders)
@@ -86,6 +99,7 @@ class DispatcherTests(unittest.TestCase):
        connect(a.a, signal, b)
        expected = []
        del a
        garbage_collect()
        result = send('this',b, a=b)
        self.assertEqual(result, expected)
        self.assertEqual(list(getAllReceivers(b,signal)), [])
@@ -101,6 +115,7 @@ class DispatcherTests(unittest.TestCase):
        connect(a, signal, b)
        expected = []
        del a
        garbage_collect()
        result = send('this',b, a=b)
        self.assertEqual(result, expected)
        self.assertEqual(list(getAllReceivers(b,signal)), [])
@@ -123,6 +138,7 @@ class DispatcherTests(unittest.TestCase):
        del a
        del b
        del result
        garbage_collect()
        self._testIsClean()
    
    def testRobust(self):