On Thu, Sep 21, 2023 at 9:47 AM Sebastian Huber < sebastian.hu...@embedded-brains.de> wrote:
> On 20.09.23 20:35, Kinsey Moore wrote: > [...] > > @@ -1306,8 +1307,22 @@ static void process_delayed_work(void) > > while (!rtems_chain_is_tail(&process_work_chain, node)) { > > work = (struct delayed_work*) node; > > rtems_chain_node* next_node = rtems_chain_next(node); > > + > > + /* > > + * Don't leave extracted node exposed to other operations > > + * under RTEMS_DEBUG > > + */ > > +#ifdef RTEMS_DEBUG > > + mutex_lock(&delayed_work_mutex); > > +#endif > > rtems_chain_extract(node); > > +#ifdef RTEMS_DEBUG > > + node->next = node; > > + mutex_unlock(&delayed_work_mutex); > > +#endif > > + > > work->callback(&work->work); > > + rtems_chain_set_off_chain(node); > > node = next_node; > > } > > } > > This change makes no sense to me. The code should work regardless if > RTEMS_DEBUG is defined or not. > RTEMS_DEBUG introduces a behavioral change in rtems_chain_extract() such that extracted nodes are automatically set off-chain. When RTEMS_DEBUG is not set, node->next is left untouched. This has to be managed because this code needs the node to remain on-chain so that it is not re-queued during the operation. Kinsey
_______________________________________________ devel mailing list devel@rtems.org http://lists.rtems.org/mailman/listinfo/devel