summaryrefslogtreecommitdiff
path: root/sysdeps/mach/hurd/pt-mutex-unlock.c
diff options
context:
space:
mode:
Diffstat (limited to 'sysdeps/mach/hurd/pt-mutex-unlock.c')
-rw-r--r--sysdeps/mach/hurd/pt-mutex-unlock.c91
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);