Ticket #1938: session-delayedcall-1938.diff
File session-delayedcall-1938.diff, 2.8 KB (added by , 16 years ago) |
---|
-
twisted/web/server.py
35 35 36 36 # Twisted Imports 37 37 from twisted.spread import pb 38 from twisted.internet import reactor, protocol, defer, address 38 from twisted.internet import reactor, protocol, defer, address, task 39 39 from twisted.web import http 40 40 from twisted.python import log, reflect, roots, failure, components 41 41 from twisted import copyright … … 399 399 self.site = site 400 400 self.uid = uid 401 401 self.expireCallbacks = [] 402 self.touch()403 402 self.sessionNamespaces = {} 403 self.checkExpiredLoop = task.LoopingCall(self.checkExpired) 404 self.touch() 404 405 405 406 def notifyOnExpire(self, callback): 406 407 """Call this callback when the session expires or logs out. … … 415 416 for c in self.expireCallbacks: 416 417 c() 417 418 self.expireCallbacks = [] 419 self.checkExpiredLoop.stop() 420 # Break reference cycle. 421 self.checkExpiredLoop = None 418 422 419 423 def touch(self): 420 424 self.lastModified = time.time() … … 424 428 if time.time() - self.lastModified > 900: 425 429 if self.site.sessions.has_key(self.uid): 426 430 self.expire() 427 else:428 pass429 #log.msg("no session to expire: %s" % self.uid)430 else:431 #log.msg("session given the will to live for 30 more minutes")432 reactor.callLater(1800, self.checkExpired)433 431 432 433 434 434 version = "TwistedWeb/%s" % copyright.version 435 435 436 436 … … 467 467 """Generate a new Session instance, and store it for future reference. 468 468 """ 469 469 uid = self._mkuid() 470 s = Session(self, uid) 471 session = self.sessions[uid] = s 472 reactor.callLater(1800, s.checkExpired) 470 session = self.sessions[uid] = Session(self, uid) 471 session.checkExpiredLoop.start(1800) 473 472 return session 474 473 475 474 def getSession(self, uid): -
twisted/web/test/test_web.py
86 86 assert site.getResourceFor(DummyRequest([''])) is sres2, "Got the wrong resource." 87 87 88 88 89 90 class SessionTest(unittest.TestCase): 91 92 def setUp(self): 93 self.site = server.Site(SimpleResource()) 94 95 def test_delayedCallCleanup(self): 96 """Checking to make sure Sessions do not leave extra DelayedCalls. 97 """ 98 session = self.site.makeSession() 99 session.touch() 100 session.expire() 101 # If Trial doesn't complain about this being a broken test, 102 # then I call it passing. 103 104 105 89 106 # Conditional requests: 90 107 # If-None-Match, If-Modified-Since 91 108