On 06/05, Petr Mladek wrote:
>
> [*] In fact, there was a bug in the original code. It tried to process
>     a non-existing signal when the system was freezing. See the common
>     check for pending signal and freezing.

And another bug afaics:

> -                     case SIGSTOP:
> -                             jffs2_dbg(1, "%s(): SIGSTOP received\n",
> -                                       __func__);
> -                             set_current_state(TASK_STOPPED);
> -                             schedule();
> -                             break;

This is obviously racy, we can miss SIGCONT.

Still I personally dislike the new kthread_sigaction() API. I agree,
a couple if signal helpers for kthreads make sense. Say,

        void kthread_do_signal_stop(void)
        {
                spin_lock_irq(&curtent->sighand->siglock);
                if (current->jobctl & JOBCTL_STOP_DEQUEUED)
                        __set_current_state(TASK_STOPPED);
                spin_unlock_irq(&current->sighand->siglock);

                schedule();
        }

and probably even "int kthread_signal_deque(void)".

But personally I do not think kthread_do_signal() makes a lot of sense...

Oleg.

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to