RTEMS | cpukit: fix off-chain state checks and pointer clearing (!1067)

Joel Sherrill (@joel) gitlab at rtems.org
Fri Feb 20 18:38:27 UTC 2026




Joel Sherrill commented on a discussion on cpukit/rtems/src/timerserver.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1067#note_143085

 >    cpu = _Watchdog_Get_CPU( &the_timer->Ticker );
 >    the_timer->stop_time = _Timer_Get_CPU_ticks( cpu );
 >    wakeup = _Chain_Is_empty( &ts->Pending );
 > +  _Chain_Set_off_chain( &the_timer->Ticker.Node.Chain );
 >    _Chain_Append_unprotected( &ts->Pending, &the_timer->Ticker.Node.Chain );

The node is pulled off the chain at line 127 and it should have been marked off chain there. But _Chain_Get_first_unprotected() only marks it off chain if debug is enabled. Is that the root cause?

The marking of a node as being off a chain should be done in all methods that take a node off a chain. I think _Chain_Initialize_node(), Chain Get, and Extract methods should all call off chain.

Similarly all the insert, prepend, and append methods can have an _Assert() that the node is off the chain.

-- 
View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1067#note_143085
You're receiving this email because of your account on gitlab.rtems.org.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/bugs/attachments/20260220/a615a1f1/attachment.htm>


More information about the bugs mailing list