Wayne Thornton commented on a discussion on cpukit/dhrl/dhrl.c: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1193#note_150620 > + continue; > + } > + > + unsigned int expected = my_epoch - 1; > + if ( > + atomic_compare_exchange_strong_explicit( > + &ctx->completed_epoch, > + &expected, > + my_epoch, > + memory_order_release, > + memory_order_relaxed > + ) > + ) { > + atomic_store_explicit( > + &ctx->winning_data_ptr, > + (uintptr_t) target_addr, @gedare I double-checked the standard on this. It is safe in this specific block because we are not dereferencing the pointer here but rather we are purely storing the numeric address value to pass it across the thread boundary. As long as the receiver casts it back to `volatile` before accessing the data (which `dhrl_work_routine` enforces via its signature), it avoids undefined behavior. To make sure this invariant is obvious to future readers and static analyzers, I'll add a comment directly above the atomic store explicitly documenting why the cast is safe. -- View it on GitLab: https://gitlab.rtems.org/rtems/rtos/rtems/-/merge_requests/1193#note_150620 You're receiving this email because of your account on gitlab.rtems.org.
_______________________________________________ bugs mailing list [email protected] http://lists.rtems.org/mailman/listinfo/bugs
