1
0
mirror of https://sourceware.org/git/glibc.git synced 2025-07-30 22:43:12 +03:00
2003-03-21  Ulrich Drepper  <drepper@redhat.com>

	* cancellation.c: Adjust for new form of compare&exchange macros.
	* cleanup_defer.c: Likewise.
	* init.c: Likewise.
	* libc-cancellation.c: Likewise.
	* old_pthread_cond_broadcast.c: Likewise.
	* old_pthread_cond_signal.c: Likewise.
	* old_pthread_cond_timedwait.c: Likewise.
	* old_pthread_cond_wait.c: Likewise.
	* pthread_cancel.c: Likewise.
	* pthread_create.c: Likewise.
	* pthread_detach.c: Likewise.
	* pthread_join.c: Likewise.
	* pthread_key_delete.c: Likewise.
	* pthread_setcancelstate.c: Likewise.
	* pthread_setcanceltype.c: Likewise.
	* pthread_timedjoin.c: Likewise.
	* pthread_tryjoin.c: Likewise.
	* sysdeps/pthread/createthread.c: Likewise.
This commit is contained in:
Ulrich Drepper
2003-03-21 08:03:25 +00:00
parent 18627f615b
commit 5a3ab2fc18
29 changed files with 172 additions and 148 deletions

View File

@ -34,11 +34,12 @@ __libc_enable_asynccancel (void)
{
struct pthread *self = THREAD_SELF;
int oldval;
int newval;
while (1)
do
{
oldval = THREAD_GETMEM (self, cancelhandling);
int newval = oldval | CANCELTYPE_BITMASK;
newval = oldval | CANCELTYPE_BITMASK;
if (__builtin_expect ((oldval & CANCELED_BITMASK) != 0, 0))
{
@ -46,8 +47,8 @@ __libc_enable_asynccancel (void)
if ((oldval & EXITING_BITMASK) != 0)
break;
if (atomic_compare_and_exchange_acq (&self->cancelhandling, newval,
oldval) != 0)
if (atomic_compare_and_exchange_bool_acq (&self->cancelhandling,
newval, oldval))
/* Somebody else modified the word, try again. */
continue;
@ -60,11 +61,9 @@ __libc_enable_asynccancel (void)
/* NOTREACHED */
}
if (atomic_compare_and_exchange_acq (&self->cancelhandling, newval,
oldval) == 0)
break;
}
while (atomic_compare_and_exchange_bool_acq (&self->cancelhandling,
newval, oldval));
return oldval;
}
@ -80,19 +79,19 @@ __libc_disable_asynccancel (int oldtype)
return;
struct pthread *self = THREAD_SELF;
int oldval;
int newval;
while (1)
do
{
int oldval = THREAD_GETMEM (self, cancelhandling);
int newval = oldval & ~CANCELTYPE_BITMASK;
oldval = THREAD_GETMEM (self, cancelhandling);
newval = oldval & ~CANCELTYPE_BITMASK;
if (newval == oldval)
break;
if (atomic_compare_and_exchange_acq (&self->cancelhandling, newval,
oldval) == 0)
break;
}
while (atomic_compare_and_exchange_bool_acq (&self->cancelhandling, newval,
oldval));
}
#endif