summaryrefslogtreecommitdiff
path: root/src/thread/pthread_create.c
diff options
context:
space:
mode:
authorRich Felker <dalias@aerifal.cx>2012-07-12 11:23:43 -0400
committerRich Felker <dalias@aerifal.cx>2012-07-12 11:23:43 -0400
commitbbbe87e35cfeef593e23010e35528e722027567f (patch)
tree6027b9323ad2232739d6ea85c9568a654ca1e506 /src/thread/pthread_create.c
parentc89f130f39b413d1fb1733166ca63d694685c529 (diff)
downloadmusl-bbbe87e35cfeef593e23010e35528e722027567f.tar.gz
fix several locks that weren't updated right for new futex-based __lock
these could have caused memory corruption due to invalid accesses to the next field. all should be fixed now; I found the errors with fgrep -r '__lock(&', which is bogus since the argument should be an array.
Diffstat (limited to 'src/thread/pthread_create.c')
-rw-r--r--src/thread/pthread_create.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/src/thread/pthread_create.c b/src/thread/pthread_create.c
index ae2f9e4e..94dc308d 100644
--- a/src/thread/pthread_create.c
+++ b/src/thread/pthread_create.c
@@ -24,12 +24,12 @@ void pthread_exit(void *result)
__pthread_tsd_run_dtors();
- __lock(&self->exitlock);
+ __lock(self->exitlock);
/* Mark this thread dead before decrementing count */
- __lock(&self->killlock);
+ __lock(self->killlock);
self->dead = 1;
- a_store(&self->killlock, 0);
+ __unlock(self->killlock);
do n = libc.threads_minus_1;
while (n && a_cas(&libc.threads_minus_1, n, n-1)!=n);