[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