Skip to content

Commit

Permalink
[PATCH] swsusp: finally solve mysqld problem
Browse files Browse the repository at this point in the history
This patch from Pavel moves userland freeze signals handling into more logical
place.  It now hits even with mysqld running.

Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Pavel Machek <pavel@suse.cz>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
  • Loading branch information
Rafael J. Wysocki authored and Linus Torvalds committed Mar 23, 2006
1 parent ce6ed29 commit fc558a7
Show file tree
Hide file tree
Showing 3 changed files with 2 additions and 9 deletions.
4 changes: 0 additions & 4 deletions arch/i386/kernel/signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -583,9 +583,6 @@ static void fastcall do_signal(struct pt_regs *regs)
if (!user_mode(regs))
return;

if (try_to_freeze())
goto no_signal;

if (test_thread_flag(TIF_RESTORE_SIGMASK))
oldset = &current->saved_sigmask;
else
Expand Down Expand Up @@ -614,7 +611,6 @@ static void fastcall do_signal(struct pt_regs *regs)
return;
}

no_signal:
/* Did we come from a system call? */
if (regs->orig_eax >= 0) {
/* Restart the system call - no handlers present */
Expand Down
4 changes: 0 additions & 4 deletions arch/x86_64/kernel/signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -443,9 +443,6 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
if (!user_mode(regs))
return 1;

if (try_to_freeze())
goto no_signal;

if (!oldset)
oldset = &current->blocked;

Expand All @@ -463,7 +460,6 @@ int do_signal(struct pt_regs *regs, sigset_t *oldset)
return handle_signal(signr, &info, &ka, oldset, regs);
}

no_signal:
/* Did we come from a system call? */
if ((long)regs->orig_rax >= 0) {
/* Restart the system call - no handlers present */
Expand Down
3 changes: 2 additions & 1 deletion kernel/signal.c
Original file line number Diff line number Diff line change
Expand Up @@ -1922,6 +1922,8 @@ int get_signal_to_deliver(siginfo_t *info, struct k_sigaction *return_ka,
sigset_t *mask = &current->blocked;
int signr = 0;

try_to_freeze();

relock:
spin_lock_irq(&current->sighand->siglock);
for (;;) {
Expand Down Expand Up @@ -2307,7 +2309,6 @@ sys_rt_sigtimedwait(const sigset_t __user *uthese,

timeout = schedule_timeout_interruptible(timeout);

try_to_freeze();
spin_lock_irq(&current->sighand->siglock);
sig = dequeue_signal(current, &these, &info);
current->blocked = current->real_blocked;
Expand Down

0 comments on commit fc558a7

Please sign in to comment.