On 21.09.23 16:52, Kinsey Moore wrote:
On Thu, Sep 21, 2023 at 9:47 AM Sebastian Huber
<sebastian.hu...@embedded-brains.de
<mailto: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.
Yes, but while a node is on a chain you must not call
rtems_chain_set_off_chain(). If you want to use the off-chain state,
then you have to use this:
rtems_chain_extract(node);
rtems_chain_set_off_chain(node);
or
rtems_chain_extract_unprotected(node);
rtems_chain_set_off_chain(node);
The automatic set off-chain in RTEMS_DEBUG is just to ensure that basic
chain operations are used in the right state.
--
embedded brains GmbH
Herr Sebastian HUBER
Dornierstr. 4
82178 Puchheim
Germany
email: sebastian.hu...@embedded-brains.de
phone: +49-89-18 94 741 - 16
fax: +49-89-18 94 741 - 08
Registergericht: Amtsgericht München
Registernummer: HRB 157899
Vertretungsberechtigte Geschäftsführer: Peter Rasmussen, Thomas Dörfler
Unsere Datenschutzerklärung finden Sie hier:
https://embedded-brains.de/datenschutzerklaerung/
_______________________________________________
devel mailing list
devel@rtems.org
http://lists.rtems.org/mailman/listinfo/devel