mempool: drop unnecessary and incorrect BUG_ON() from mempool_destroy()
[firefly-linux-kernel-4.4.55.git] / kernel / signal.c
index 56ce3a618b289e1f16fddeba393c62b76fdd0e5d..bb0efa5705ed3295bee197ae4dcbae8cfb5673f1 100644 (file)
@@ -2355,8 +2355,15 @@ void exit_signals(struct task_struct *tsk)
        int group_stop = 0;
        sigset_t unblocked;
 
+       /*
+        * @tsk is about to have PF_EXITING set - lock out users which
+        * expect stable threadgroup.
+        */
+       threadgroup_change_begin(tsk);
+
        if (thread_group_empty(tsk) || signal_group_exit(tsk->signal)) {
                tsk->flags |= PF_EXITING;
+               threadgroup_change_end(tsk);
                return;
        }
 
@@ -2366,6 +2373,9 @@ void exit_signals(struct task_struct *tsk)
         * see wants_signal(), do_signal_stop().
         */
        tsk->flags |= PF_EXITING;
+
+       threadgroup_change_end(tsk);
+
        if (!signal_pending(tsk))
                goto out;