Messages in this thread | | | Date | Thu, 18 May 2023 18:25:49 +0200 | From | Oleg Nesterov <> | Subject | Re: [RFC PATCH 1/8] signal: Dequeue SIGKILL even if SIGNAL_GROUP_EXIT/group_exec_task is set |
| |
I too do not understand the 1st change in this patch ...
On 05/18, Mike Christie wrote: > > In the other patches we do: > > if (get_signal(ksig)) > start_exit_cleanup_by_stopping_newIO() > flush running IO() > exit() > > But to do the flush running IO() part of this I need to wait for it so > that's why I wanted to be able to dequeue the SIGKILL and clear the > TIF_SIGPENDING bit.
But get_signal() will do what you need, dequeue SIGKILL and clear SIGPENDING ?
if ((signal->flags & SIGNAL_GROUP_EXIT) || signal->group_exec_task) { clear_siginfo(&ksig->info); ksig->info.si_signo = signr = SIGKILL; sigdelset(¤t->pending.signal, SIGKILL);
this "dequeues" SIGKILL,
trace_signal_deliver(SIGKILL, SEND_SIG_NOINFO, &sighand->action[SIGKILL - 1]); recalc_sigpending();
this clears TIF_SIGPENDING.
> Or I don't need this specifically. In patch 0/8 I said I knew you guys > would not like it :) If I just have a: > > if (fatal_signal()) > clear_fatal_signal()
see above...
Well... I think this code is actually wrong if if SIGSTOP is pending and the task is PF_IO_WORKER, but this is also true for io-threads so we can discuss this separately.
Oleg.
| |