Fix absolute timers triggering in the wrong order.

This commit is contained in:
Jonas 'Sortie' Termansen 2022-12-03 21:49:01 +01:00
parent 68a278ddb3
commit cbf16b4891
1 changed files with 5 additions and 8 deletions

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2013, 2016, 2017, 2018, 2021 Jonas 'Sortie' Termansen. * Copyright (c) 2013, 2016, 2017, 2018, 2021, 2022 Jonas 'Sortie' Termansen.
* *
* Permission to use, copy, modify, and distribute this software for any * Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above * purpose with or without fee is hereby granted, provided that the above
@ -155,7 +155,8 @@ void Clock::RegisterAbsolute(Timer* timer) // Lock acquired.
for ( Timer* iter = absolute_timer; iter; iter = iter->next_timer ) for ( Timer* iter = absolute_timer; iter; iter = iter->next_timer )
{ {
if ( timespec_lt(timer->value.it_value, iter->value.it_value) ) if ( timespec_lt(timer->value.it_value, iter->value.it_value) )
before = iter; break;
before = iter;
} }
timer->prev_timer = before; timer->prev_timer = before;
@ -180,12 +181,8 @@ void Clock::RegisterDelay(Timer* timer) // Lock acquired.
timer->prev_timer = before; timer->prev_timer = before;
timer->next_timer = before ? before->next_timer : delay_timer; timer->next_timer = before ? before->next_timer : delay_timer;
if ( timer->next_timer ) if ( timer->next_timer ) timer->next_timer->prev_timer = timer;
timer->next_timer->prev_timer = timer; (before ? before->next_timer : delay_timer) = timer;
if ( before )
before->next_timer = timer;
else
delay_timer = timer;
if ( timer->next_timer ) if ( timer->next_timer )
timer->next_timer->value.it_value = timer->next_timer->value.it_value =