Беглый взгляд на исходный код (v4.20):
send_sig()
только звонки send_sig_info()
... - . .. который проверяет, является ли значение сигнала действительным, а затем вызывает
do_send_sig_info()
... - ... который вызывает
lock_task_sighand()
... - ... с функцией блокировки спин-блокировки
tsk->sighand->siglock
(через spin_lock_irqsave()
). Эта спин-блокировка освобождается только в конце do_send_sig_info()
, который затем немедленно возвращается.
Мы знаем, что код ядра не должен спать во время удержания спин-блокировки, поскольку это будет фатальной ошибкой. Поскольку самая первая цепочка вызовов, выполняемых send_sig()
, блокирует спин-блокировку, которая затем удерживается на протяжении всей операции, мы можем сделать вывод, что функция send_sig()
не спит .