]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
futex: Set task::futex_state to DEAD right after handling futex exit
authorThomas Gleixner <tglx@linutronix.de>
Wed, 6 Nov 2019 21:55:40 +0000 (22:55 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 30 Jan 2021 12:32:11 +0000 (13:32 +0100)
commit f24f22435dcc11389acc87e5586239c1819d217c upstream

Setting task::futex_state in do_exit() is rather arbitrarily placed for no
reason. Move it into the futex code.

Note, this is only done for the exit cleanup as the exec cleanup cannot set
the state to FUTEX_STATE_DEAD because the task struct is still in active
use.

Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Reviewed-by: Ingo Molnar <mingo@kernel.org>
Acked-by: Peter Zijlstra (Intel) <peterz@infradead.org>
Link: https://lkml.kernel.org/r/20191106224556.439511191@linutronix.de
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
kernel/exit.c
kernel/futex.c

index 38de88f8f75daea7bdff12caa81ff6d1eecde87f..d6c250f579775da25a54b436f8541e49205b959a 100644 (file)
@@ -909,7 +909,6 @@ void __noreturn do_exit(long code)
         * Make sure we are holding no locks:
         */
        debug_check_no_locks_held();
-       futex_exit_done(tsk);
 
        if (tsk->io_context)
                exit_io_context(tsk);
index 6f00ce1c679e0112f35725847d3b44c65d754637..ac1fe4c5f2319184a3c4f530ae9d8ec1c1e9965d 100644 (file)
@@ -3719,6 +3719,7 @@ void futex_exec_release(struct task_struct *tsk)
 void futex_exit_release(struct task_struct *tsk)
 {
        futex_exec_release(tsk);
+       futex_exit_done(tsk);
 }
 
 long do_futex(u32 __user *uaddr, int op, u32 val, ktime_t *timeout,