mark_engine_detached() removes ENGINE_STOP from engine->flags, this means
utrace_control(UTRACE_DETACH) can never seer engine_wants_stop() == T.

Signed-off-by: Oleg Nesterov <o...@redhat.com>
---

 kernel/utrace.c |    3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

--- __UTRACE/kernel/utrace.c~1_FIX_DETACH_BEFORE_WANT_STOP      2009-09-01 
20:02:26.000000000 +0200
+++ __UTRACE/kernel/utrace.c    2009-09-01 20:03:25.000000000 +0200
@@ -1086,7 +1086,6 @@ int utrace_control(struct task_struct *t
                break;
 
        case UTRACE_DETACH:
-               mark_engine_detached(engine);
                reset = reset || utrace_do_stop(target, utrace);
                if (!reset) {
                        /*
@@ -1106,9 +1105,9 @@ int utrace_control(struct task_struct *t
                         * We need utrace_reset() to check if anyone else
                         * still wants this target to stay stopped.
                         */
-                       clear_engine_wants_stop(engine);
                        reset = true;
                }
+               mark_engine_detached(engine);
                break;
 
        case UTRACE_RESUME:

Reply via email to