[hurd,commited] htl: Fix pthread_once memory ordering

Samuel Thibault <[email protected]>
Newsgroups gmane.os.hurd.cvs,gmane.comp.lib.glibc.alpha
Message-ID <[email protected]>
We need to tie the fast-path read with the store, to make sure that when
fast-reading 1, we see all the effects performed by the init routine.

(and we don't need a full barrier, only an acquire/release pair is
needed)

Reported-by: Brent Baccala <[email protected]> 's Claude assistant
---
 sysdeps/htl/pt-once.c | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/sysdeps/htl/pt-once.c b/sysdeps/htl/pt-once.c
index 5737033bf7..965ab8894c 100644
--- a/sysdeps/htl/pt-once.c
+++ b/sysdeps/htl/pt-once.c
@@ -34,8 +34,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
 {
   ASSERT_TYPE_SIZE (pthread_once_t, __SIZEOF_PTHREAD_ONCE_T);
 
-  atomic_full_barrier ();
-  if (once_control->__run == 0)
+  if (atomic_load_acquire (&once_control->__run) == 0)
     {
       __pthread_spin_wait (&once_control->__lock);
 
@@ -45,8 +44,7 @@ __pthread_once (pthread_once_t *once_control, void (*init_routine) (void))
 	  init_routine ();
 	  pthread_cleanup_pop (0);
 
-	  atomic_full_barrier ();
-	  once_control->__run = 1;
+	  atomic_store_release (&once_control->__run, 1);
 	}
 
       __pthread_spin_unlock (&once_control->__lock);
-- 
2.51.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.