Ticket #5962: clockinfloop.patch

File clockinfloop.patch, 2.0 KB (added by Saurabh, 3 years ago)
  • twisted/test/test_task.py

     
    8989        self.assertEqual(events, [None])
    9090        self.failIf(call.active())
    9191
     92    def testAdvanceInfiniteLoop(self):
     93        """
     94        check if advance(0) leads to infinite loop
     95        """
     96        self.i = 0
     97        def f():
     98            if self.i <= 2:
     99                self.c.callLater(0, f)
     100            self.i+=1
     101        self.c = task.Clock()
     102        f()
     103        self.c.advance(0)
     104        self.assertEqual(self.i,2)
    92105
     106
    93107    def testAdvanceCancel(self):
    94108        """
    95109        Test attemping to cancel the call in a callback.
  • twisted/internet/task.py

     
    696696
    697697    def __init__(self):
    698698        self.calls = []
     699        self.tempCalls = []
     700        self.checkLoop = 0
    699701
    700702
    701703    def seconds(self):
     
    726728                               self.calls.remove,
    727729                               lambda c: None,
    728730                               self.seconds)
    729         self.calls.append(dc)
     731        if self.checkLoop and not when:
     732            self.tempCalls.append(dc)
     733        else:
     734            self.calls.append(dc)
    730735        self._sortCalls()
    731736        return dc
    732737
     
    748753        time.
    749754        """
    750755        self.rightNow += amount
     756        if not amount:
     757            self.checkLoop = 1
    751758        self._sortCalls()
    752759        while self.calls and self.calls[0].getTime() <= self.seconds():
    753760            call = self.calls.pop(0)
    754761            call.called = 1
    755762            call.func(*call.args, **call.kw)
    756763            self._sortCalls()
     764        if self.checkLoop and self.tempCalls:
     765            self.calls = self.calls + self.tempCalls
     766            self.tempCalls = []
     767            self._sortCalls()
     768        self.checkLoop = 0
    757769
    758770
    759771    def pump(self, timings):