diff options
Diffstat (limited to 'sysdeps/mach/hurd/pt-mutex-unlock.c')
-rw-r--r-- | sysdeps/mach/hurd/pt-mutex-unlock.c | 91 |
1 files changed, 46 insertions, 45 deletions
diff --git a/sysdeps/mach/hurd/pt-mutex-unlock.c b/sysdeps/mach/hurd/pt-mutex-unlock.c index 80ca5b9..de3ae9d 100644 --- a/sysdeps/mach/hurd/pt-mutex-unlock.c +++ b/sysdeps/mach/hurd/pt-mutex-unlock.c @@ -23,64 +23,65 @@ #include "pt-mutex.h" #include <hurdlock.h> -int __pthread_mutex_unlock (pthread_mutex_t *mtxp) +int +__pthread_mutex_unlock (pthread_mutex_t *mtxp) { struct __pthread *self; int ret = 0, flags = mtxp->__flags & GSYNC_SHARED; switch (MTX_TYPE (mtxp)) { - case PT_MTX_NORMAL: - lll_unlock (&mtxp->__lock, flags); - break; + case PT_MTX_NORMAL: + lll_unlock (&mtxp->__lock, flags); + break; - case PT_MTX_RECURSIVE: - self = _pthread_self (); - if (!mtx_owned_p (mtxp, self, flags)) - ret = EPERM; - else if (--mtxp->__cnt == 0) - { - mtxp->__owner_id = mtxp->__shpid = 0; - lll_unlock (&mtxp->__lock, flags); - } + case PT_MTX_RECURSIVE: + self = _pthread_self (); + if (!mtx_owned_p (mtxp, self, flags)) + ret = EPERM; + else if (--mtxp->__cnt == 0) + { + mtxp->__owner_id = mtxp->__shpid = 0; + lll_unlock (&mtxp->__lock, flags); + } - break; + break; - case PT_MTX_ERRORCHECK: - self = _pthread_self (); - if (!mtx_owned_p (mtxp, self, flags)) - ret = EPERM; - else - { - mtxp->__owner_id = mtxp->__shpid = 0; - lll_unlock (&mtxp->__lock, flags); - } + case PT_MTX_ERRORCHECK: + self = _pthread_self (); + if (!mtx_owned_p (mtxp, self, flags)) + ret = EPERM; + else + { + mtxp->__owner_id = mtxp->__shpid = 0; + lll_unlock (&mtxp->__lock, flags); + } - break; + break; - case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: - case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: - case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: - self = _pthread_self (); - if (mtxp->__owner_id == NOTRECOVERABLE_ID) - ; /* Nothing to do. */ - else if (mtxp->__owner_id != self->thread || - (int)(mtxp->__lock & LLL_OWNER_MASK) != __getpid ()) - ret = EPERM; - else if (--mtxp->__cnt == 0) - { - /* Release the lock. If it's in an inconsistent - * state, mark it as irrecoverable. */ - mtxp->__owner_id = (mtxp->__lock & LLL_DEAD_OWNER) ? - NOTRECOVERABLE_ID : 0; - __lll_robust_unlock (&mtxp->__lock, flags); - } + case PT_MTX_NORMAL | PTHREAD_MUTEX_ROBUST: + case PT_MTX_RECURSIVE | PTHREAD_MUTEX_ROBUST: + case PT_MTX_ERRORCHECK | PTHREAD_MUTEX_ROBUST: + self = _pthread_self (); + if (mtxp->__owner_id == NOTRECOVERABLE_ID) + ; /* Nothing to do. */ + else if (mtxp->__owner_id != self->thread || + (int) (mtxp->__lock & LLL_OWNER_MASK) != __getpid ()) + ret = EPERM; + else if (--mtxp->__cnt == 0) + { + /* Release the lock. If it's in an inconsistent + * state, mark it as irrecoverable. */ + mtxp->__owner_id = (mtxp->__lock & LLL_DEAD_OWNER) ? + NOTRECOVERABLE_ID : 0; + __lll_robust_unlock (&mtxp->__lock, flags); + } - break; + break; - default: - ret = EINVAL; - break; + default: + ret = EINVAL; + break; } return (ret); |