oldSet shouldn't be changed in case of error. Thanks axel for noticing
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@18533 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
parent
0ce93ee730
commit
c941d45cd5
@ -385,26 +385,25 @@ sigprocmask(int how, const sigset_t *set, sigset_t *oldSet)
|
||||
struct thread *thread = thread_get_current_thread();
|
||||
sigset_t oldMask = atomic_get(&thread->sig_block_mask);
|
||||
|
||||
if (set != NULL) {
|
||||
switch (how) {
|
||||
case SIG_BLOCK:
|
||||
atomic_or(&thread->sig_block_mask, *set & BLOCKABLE_SIGNALS);
|
||||
break;
|
||||
case SIG_UNBLOCK:
|
||||
atomic_and(&thread->sig_block_mask, ~*set);
|
||||
break;
|
||||
case SIG_SETMASK:
|
||||
atomic_set(&thread->sig_block_mask, *set & BLOCKABLE_SIGNALS);
|
||||
break;
|
||||
default:
|
||||
return B_BAD_VALUE;
|
||||
}
|
||||
}
|
||||
|
||||
if (oldSet != NULL)
|
||||
*oldSet = oldMask;
|
||||
|
||||
if (set == NULL)
|
||||
return B_OK;
|
||||
|
||||
switch (how) {
|
||||
case SIG_BLOCK:
|
||||
atomic_or(&thread->sig_block_mask, *set & BLOCKABLE_SIGNALS);
|
||||
break;
|
||||
case SIG_UNBLOCK:
|
||||
atomic_and(&thread->sig_block_mask, ~*set);
|
||||
break;
|
||||
case SIG_SETMASK:
|
||||
atomic_set(&thread->sig_block_mask, *set & BLOCKABLE_SIGNALS);
|
||||
break;
|
||||
default:
|
||||
return B_BAD_VALUE;
|
||||
}
|
||||
|
||||
return B_OK;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user