Messages in this thread Patch in this message | | | Date | Wed, 11 May 2005 19:20:47 +0400 | From | Kirill Korotaev <> | Subject | [PATCH] Software suspend and recalc sigpending bug fix |
| |
This patch fixes recalc_sigpending() to work correctly with tasks which are being freezed. The problem is that freeze_processes() sets PF_FREEZE and TIF_SIGPENDING flags on tasks, but recalc_sigpending() called from e.g. sys_rt_sigtimedwait or any other kernel place will clear TIF_SIGPENDING due to no pending signals queued and the tasks won't be freezed until it recieves a real signal or freezed_processes() fail due to timeout.
Signed-Off-By: Kirill Korotaev <dev@sw.ru> Signed-Off-By: Alexey Kuznetsov <kuznet@ms2.inr.ac.ru> --- ./kernel/signal.c.freezesigrec 2005-05-10 16:10:40.000000000 +0400 +++ ./kernel/signal.c 2005-05-10 18:10:08.000000000 +0400 @@ -212,6 +212,7 @@ static inline int has_pending_signals(si fastcall void recalc_sigpending_tsk(struct task_struct *t) { if (t->signal->group_stop_count > 0 || + (t->flags&PF_FREEZE) || PENDING(&t->pending, &t->blocked) || PENDING(&t->signal->shared_pending, &t->blocked)) set_tsk_thread_flag(t, TIF_SIGPENDING); | |