summaryrefslogtreecommitdiff
path: root/libgomp/critical.c
diff options
context:
space:
mode:
Diffstat (limited to 'libgomp/critical.c')
-rw-r--r--libgomp/critical.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/libgomp/critical.c b/libgomp/critical.c
index 70159ec7a6e..90821634b5e 100644
--- a/libgomp/critical.c
+++ b/libgomp/critical.c
@@ -72,12 +72,14 @@ GOMP_critical_name_start (void **pptr)
gomp_mutex_t *nlock = gomp_malloc (sizeof (gomp_mutex_t));
gomp_mutex_init (nlock);
- plock = __sync_val_compare_and_swap (pptr, plock, nlock);
- if (plock != nlock)
+ plock = __sync_val_compare_and_swap (pptr, NULL, nlock);
+ if (plock != NULL)
{
gomp_mutex_destroy (nlock);
free (nlock);
}
+ else
+ plock = nlock;
#else
gomp_mutex_lock (&create_lock_lock);
plock = *pptr;