Download Install Tutorial Docs FAQ Tools WikiLicense Team IRC Planet Involvement Shop Book

Changeset 1012

Show
Ignore:
Timestamp:
03/22/06 02:03:15
Author:
fumanchu
Message:

Test for #496 (memory leak in thread locals).

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/cherrypy/test/test_http.py

    r1011 r1012  
    1010test.prefer_parent_path() 
    1111 
     12import gc 
    1213import httplib 
     14import threading 
    1315import cherrypy 
     16from cherrypy import _cphttptools 
    1417 
     18 
     19data = object() 
    1520 
    1621class Root: 
    1722    def index(self, *args, **kwargs): 
     23        cherrypy.thread_data.thing = data 
    1824        return "Hello world!" 
    1925    index.exposed = True 
     
    4147 
    4248 
     49def get_instances(cls): 
     50    return [x for x in gc.get_objects() if isinstance(x, cls)] 
     51 
     52 
     53class ReferenceTests(helper.CPWebCase): 
     54     
     55    def test_threadlocal_garbage(self): 
     56        def getpage(): 
     57            self.getPage('/') 
     58            self.assertBody("Hello world!") 
     59         
     60        ts = [] 
     61        for _ in range(100): 
     62            t = threading.Thread(target=getpage) 
     63            ts.append(t) 
     64            t.start() 
     65         
     66        for t in ts: 
     67            t.join() 
     68         
     69        self.assertEqual(gc.collect(), 0) 
     70        self.assertEqual(len(get_instances(_cphttptools.Request)), 0) 
     71        self.assertEqual(len(get_instances(_cphttptools.Response)), 0) 
     72        self.assertEqual(len(gc.get_referrers(data)), 1) 
     73 
     74 
    4375if __name__ == '__main__': 
    4476    helper.testmain(server="cherrypy._cpwsgi.WSGIServer") 

Hosted by WebFaction

Log in as guest/cpguest to create tickets