diff options
| author | John Polstra <jdp@FreeBSD.org> | 1999-12-28 04:38:17 +0000 |
|---|---|---|
| committer | John Polstra <jdp@FreeBSD.org> | 1999-12-28 04:38:17 +0000 |
| commit | 3600eb76c6005988b386d04cfdb5963b38a18eee (patch) | |
| tree | 87a46a42824ad2fcf6b934cf07a8d0e56a4a34b7 /libexec | |
| parent | 427db879c9c39266493f3a7f772d0acc584547b4 (diff) | |
Notes
Diffstat (limited to 'libexec')
| -rw-r--r-- | libexec/rtld-elf/alpha/lockdflt.c | 12 | ||||
| -rw-r--r-- | libexec/rtld-elf/amd64/lockdflt.c | 12 | ||||
| -rw-r--r-- | libexec/rtld-elf/i386/lockdflt.c | 12 | ||||
| -rw-r--r-- | libexec/rtld-elf/lockdflt.c | 12 |
4 files changed, 32 insertions, 16 deletions
diff --git a/libexec/rtld-elf/alpha/lockdflt.c b/libexec/rtld-elf/alpha/lockdflt.c index 6f278c3ab284..c92695001bd7 100644 --- a/libexec/rtld-elf/alpha/lockdflt.c +++ b/libexec/rtld-elf/alpha/lockdflt.c @@ -51,8 +51,11 @@ void lockdflt_acquire(void *lock) { LockDflt *l = (LockDflt *)lock; - sigprocmask(SIG_BLOCK, &l->lock_mask, &l->old_mask); - assert(l->depth == 0); + sigset_t old_mask; + + sigprocmask(SIG_BLOCK, &l->lock_mask, &old_mask); + if (l->depth == 0) + l->old_mask = old_mask; l->depth++; } @@ -81,9 +84,10 @@ void lockdflt_release(void *lock) { LockDflt *l = (LockDflt *)lock; - assert(l->depth == 1); l->depth--; - sigprocmask(SIG_SETMASK, &l->old_mask, NULL); + assert(l->depth >= 0); + if (l->depth == 0) + sigprocmask(SIG_SETMASK, &l->old_mask, NULL); } void diff --git a/libexec/rtld-elf/amd64/lockdflt.c b/libexec/rtld-elf/amd64/lockdflt.c index 6f278c3ab284..c92695001bd7 100644 --- a/libexec/rtld-elf/amd64/lockdflt.c +++ b/libexec/rtld-elf/amd64/lockdflt.c @@ -51,8 +51,11 @@ void lockdflt_acquire(void *lock) { LockDflt *l = (LockDflt *)lock; - sigprocmask(SIG_BLOCK, &l->lock_mask, &l->old_mask); - assert(l->depth == 0); + sigset_t old_mask; + + sigprocmask(SIG_BLOCK, &l->lock_mask, &old_mask); + if (l->depth == 0) + l->old_mask = old_mask; l->depth++; } @@ -81,9 +84,10 @@ void lockdflt_release(void *lock) { LockDflt *l = (LockDflt *)lock; - assert(l->depth == 1); l->depth--; - sigprocmask(SIG_SETMASK, &l->old_mask, NULL); + assert(l->depth >= 0); + if (l->depth == 0) + sigprocmask(SIG_SETMASK, &l->old_mask, NULL); } void diff --git a/libexec/rtld-elf/i386/lockdflt.c b/libexec/rtld-elf/i386/lockdflt.c index 6f278c3ab284..c92695001bd7 100644 --- a/libexec/rtld-elf/i386/lockdflt.c +++ b/libexec/rtld-elf/i386/lockdflt.c @@ -51,8 +51,11 @@ void lockdflt_acquire(void *lock) { LockDflt *l = (LockDflt *)lock; - sigprocmask(SIG_BLOCK, &l->lock_mask, &l->old_mask); - assert(l->depth == 0); + sigset_t old_mask; + + sigprocmask(SIG_BLOCK, &l->lock_mask, &old_mask); + if (l->depth == 0) + l->old_mask = old_mask; l->depth++; } @@ -81,9 +84,10 @@ void lockdflt_release(void *lock) { LockDflt *l = (LockDflt *)lock; - assert(l->depth == 1); l->depth--; - sigprocmask(SIG_SETMASK, &l->old_mask, NULL); + assert(l->depth >= 0); + if (l->depth == 0) + sigprocmask(SIG_SETMASK, &l->old_mask, NULL); } void diff --git a/libexec/rtld-elf/lockdflt.c b/libexec/rtld-elf/lockdflt.c index 6f278c3ab284..c92695001bd7 100644 --- a/libexec/rtld-elf/lockdflt.c +++ b/libexec/rtld-elf/lockdflt.c @@ -51,8 +51,11 @@ void lockdflt_acquire(void *lock) { LockDflt *l = (LockDflt *)lock; - sigprocmask(SIG_BLOCK, &l->lock_mask, &l->old_mask); - assert(l->depth == 0); + sigset_t old_mask; + + sigprocmask(SIG_BLOCK, &l->lock_mask, &old_mask); + if (l->depth == 0) + l->old_mask = old_mask; l->depth++; } @@ -81,9 +84,10 @@ void lockdflt_release(void *lock) { LockDflt *l = (LockDflt *)lock; - assert(l->depth == 1); l->depth--; - sigprocmask(SIG_SETMASK, &l->old_mask, NULL); + assert(l->depth >= 0); + if (l->depth == 0) + sigprocmask(SIG_SETMASK, &l->old_mask, NULL); } void |
