@@ -3929,6 +3929,10 @@ def test_eventfd_select(self):
3929
3929
@unittest .skipUnless (hasattr (os , 'timerfd_create' ), 'requires os.timerfd_create' )
3930
3930
@support .requires_linux_version (2 , 6 , 30 )
3931
3931
class TimerfdTests (unittest .TestCase ):
3932
+ # Tolerate a difference of 50 us
3933
+ CLOCK_RES_NS = 50_000
3934
+ CLOCK_RES = CLOCK_RES_NS * 1e-9
3935
+
3932
3936
def timerfd_create (self , * args , ** kwargs ):
3933
3937
fd = os .timerfd_create (* args , ** kwargs )
3934
3938
self .assertGreaterEqual (fd , 0 )
@@ -3982,9 +3986,13 @@ def test_timerfd_negative(self):
3982
3986
one_sec_in_nsec = 10 ** 9
3983
3987
fd = self .timerfd_create (time .CLOCK_REALTIME )
3984
3988
3989
+ test_flags = [0 , os .TFD_TIMER_ABSTIME ]
3990
+ if hasattr (os , 'TFD_TIMER_CANCEL_ON_SET' ):
3991
+ test_flags .append (os .TFD_TIMER_ABSTIME | os .TFD_TIMER_CANCEL_ON_SET )
3992
+
3985
3993
# Any of 'initial' and 'interval' is negative value.
3986
3994
for initial , interval in ( (- 1 , 0 ), (1 , - 1 ), (- 1 , - 1 ), (- 0.1 , 0 ), (1 , - 0.1 ), (- 0.1 , - 0.1 )):
3987
- for flags in ( 0 , os . TFD_TIMER_ABSTIME , os . TFD_TIMER_ABSTIME | os . TFD_TIMER_CANCEL_ON_SET ) :
3995
+ for flags in test_flags :
3988
3996
with self .subTest (flags = flags , initial = initial , interval = interval ):
3989
3997
with self .assertRaises (OSError ) as context :
3990
3998
_ , _ = os .timerfd_settime (fd , flags = flags , initial = initial , interval = interval )
@@ -4055,7 +4063,7 @@ def test_timerfd_TFD_TIMER_ABSTIME(self):
4055
4063
t = time .perf_counter () - t
4056
4064
self .assertEqual (count_signaled , 1 )
4057
4065
4058
- self .assertGreater (t , offset )
4066
+ self .assertGreater (t , offset - self . CLOCK_RES )
4059
4067
4060
4068
def test_timerfd_select (self ):
4061
4069
size = 8 # read 8 bytes
@@ -4208,7 +4216,7 @@ def test_timerfd_ns_TFD_TIMER_ABSTIME(self):
4208
4216
t = time .perf_counter_ns () - t
4209
4217
self .assertEqual (count_signaled , 1 )
4210
4218
4211
- self .assertGreater (t , offset_ns )
4219
+ self .assertGreater (t , offset_ns - self . CLOCK_RES_NS )
4212
4220
4213
4221
def test_timerfd_ns_select (self ):
4214
4222
size = 8 # read 8 bytes
0 commit comments