diff options
| -rw-r--r-- | src/thread/pthread_once.c | 3 | 
1 files changed, 1 insertions, 2 deletions
| diff --git a/src/thread/pthread_once.c b/src/thread/pthread_once.c index 41872f16..e01f6d48 100644 --- a/src/thread/pthread_once.c +++ b/src/thread/pthread_once.c @@ -18,7 +18,7 @@ int pthread_once(pthread_once_t *control, void (*init)(void))  	 *  1 - another thread is running init; wait  	 *  2 - another thread finished running init; just return */ -	for (;;) switch (a_swap(control, 1)) { +	for (;;) switch (a_cas(control, 0, 1)) {  	case 0:  		pthread_cleanup_push(undo, control);  		init(); @@ -31,7 +31,6 @@ int pthread_once(pthread_once_t *control, void (*init)(void))  		__wait(control, &waiters, 1, 0);  		continue;  	case 2: -		a_store(control, 2);  		return 0;  	}  } | 
