Skip to content

Commit c39afff

Browse files
Fix segfault in TimerHandle.when() after cleared
Fixes #469 Closes #475 Co-authored-by: Fantix King <[email protected]>
1 parent fcbf422 commit c39afff

File tree

4 files changed

+12
-1
lines changed

4 files changed

+12
-1
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,3 +34,4 @@ uvloop/loop.*.pyd
3434
/.eggs
3535
/.venv*
3636
/wheelhouse
37+
/uvloop-dev

tests/test_base.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -860,6 +860,14 @@ def test_loop_call_later_handle_when(self):
860860
self.assertAlmostEqual(handle.when(), loop_t + delay, places=2)
861861
handle.cancel()
862862
self.assertTrue(handle.cancelled())
863+
self.assertAlmostEqual(handle.when(), loop_t + delay, places=2)
864+
865+
def test_loop_call_later_handle_when_after_fired(self):
866+
fut = self.loop.create_future()
867+
handle = self.loop.call_later(0.05, fut.set_result, None)
868+
when = handle.when()
869+
self.loop.run_until_complete(fut)
870+
self.assertEqual(handle.when(), when)
863871

864872

865873
class TestBaseAIO(_TestBase, AIOTestCase):

uvloop/cbhandles.pxd

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ cdef class TimerHandle:
3232
object context
3333
tuple _debug_info
3434
object __weakref__
35+
object _when
3536

3637
cdef _run(self)
3738
cdef _cancel(self)

uvloop/cbhandles.pyx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -193,6 +193,7 @@ cdef class TimerHandle:
193193
loop, <method_t>self._run, self, delay)
194194

195195
self.timer.start()
196+
self._when = self.timer.get_when() * 1e-3
196197

197198
# Only add to loop._timers when `self.timer` is successfully created
198199
loop._timers.add(self)
@@ -309,7 +310,7 @@ cdef class TimerHandle:
309310
self._cancel()
310311

311312
def when(self):
312-
return self.timer.get_when() * 1e-3
313+
return self._when
313314

314315

315316
cdef format_callback_name(func):

0 commit comments

Comments
 (0)