[PATCH] Memory fencing problem in pthread cancellation
Carlos O'Donell
carlos@systemhalted.org
Mon Jan 14 22:51:00 GMT 2013
On 01/14/2013 03:50 PM, Roland McGrath wrote:
> I'd like to see comments clarifying what the memory clobber is actually
> accomplishing and why it's necessary. The other introductions of barriers
> that have no comments need comments.
>
Jeff,
I'd suggest something like this:
atomic_write_barrier ();
+ /* At the point at which any thread writes the handle
+ to libgcc_s_handle, the initialization is complete.
+ The writing of libgcc_s_handle is atomic. All other
+ threads reading libgcc_s_handle do so atomically. Any
+ thread that does not execute this function must issue
+ a read barrier to ensure that all of the above has
+ actually completed and that the values of the
+ function pointers are correct. */
libgcc_s_handle = handle;
If your thread did not actually execute the entire
initialization function you must issue a read barrier
to ensure that the CPU does not speculatively move the
load of a function pointer to a point before the
write that sets it to the correct value.
Cheers,
Carlos.
More information about the Libc-alpha
mailing list