sigset_t *mask = ¤t->blocked;
int signr = 0;
+ try_to_freeze();
+
relock:
spin_lock_irq(¤t->sighand->siglock);
for (;;) {
int sigprocmask(int how, sigset_t *set, sigset_t *oldset)
{
int error;
- sigset_t old_block;
spin_lock_irq(¤t->sighand->siglock);
- old_block = current->blocked;
+ if (oldset)
+ *oldset = current->blocked;
+
error = 0;
switch (how) {
case SIG_BLOCK:
}
recalc_sigpending();
spin_unlock_irq(¤t->sighand->siglock);
- if (oldset)
- *oldset = old_block;
+
return error;
}
timeout = schedule_timeout_interruptible(timeout);
- try_to_freeze();
spin_lock_irq(¤t->sighand->siglock);
sig = dequeue_signal(current, &these, &info);
current->blocked = current->real_blocked;