Bernhard Loos : server: If a debugger is attached to a process, child processes shouldn't get debugged.

Alexandre Julliard julliard at winehq.org
Mon Oct 10 10:25:36 CDT 2011


Module: wine
Branch: master
Commit: e7ec00d22cfcaedbccad499f503c50efc8125117
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=e7ec00d22cfcaedbccad499f503c50efc8125117

Author: Bernhard Loos <bernhardloos at googlemail.com>
Date:   Sun Oct  9 23:26:03 2011 +0200

server: If a debugger is attached to a process, child processes shouldn't get debugged.

---

 server/debugger.c |    1 +
 server/process.c  |    6 +++---
 server/process.h  |    4 ++--
 3 files changed, 6 insertions(+), 5 deletions(-)

diff --git a/server/debugger.c b/server/debugger.c
index 35cb3e3..5c0e2c8 100644
--- a/server/debugger.c
+++ b/server/debugger.c
@@ -485,6 +485,7 @@ int debugger_detach( struct process *process, struct thread *debugger )
 
     /* remove relationships between process and its debugger */
     process->debugger = NULL;
+    process->debug_children = 0;
     if (!set_process_debug_flag( process, 0 )) clear_error();  /* ignore error */
 
     /* from this function */
diff --git a/server/process.c b/server/process.c
index c88c89b..de3b594 100644
--- a/server/process.c
+++ b/server/process.c
@@ -322,7 +322,7 @@ struct thread *create_process( int fd, struct thread *parent_thread, int inherit
     process->priority        = PROCESS_PRIOCLASS_NORMAL;
     process->suspend         = 0;
     process->is_system       = 0;
-    process->create_flags    = 0;
+    process->debug_children  = 0;
     process->console         = NULL;
     process->startup_state   = STARTUP_IN_PROGRESS;
     process->startup_info    = NULL;
@@ -937,7 +937,7 @@ DECL_HANDLER(new_process)
 
     if (!(thread = create_process( socket_fd, current, req->inherit_all ))) goto done;
     process = thread->process;
-    process->create_flags = req->create_flags;
+    process->debug_children = !(req->create_flags & DEBUG_ONLY_THIS_PROCESS);
     process->startup_info = (struct startup_info *)grab_object( info );
 
     /* connect to the window station */
@@ -972,7 +972,7 @@ DECL_HANDLER(new_process)
     /* attach to the debugger if requested */
     if (req->create_flags & (DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS))
         set_process_debugger( process, current );
-    else if (parent->debugger && !(parent->create_flags & DEBUG_ONLY_THIS_PROCESS))
+    else if (parent->debugger && parent->debug_children)
         set_process_debugger( process, parent->debugger );
 
     if (!(req->create_flags & CREATE_NEW_PROCESS_GROUP))
diff --git a/server/process.h b/server/process.h
index da51a0e..93ec6c7 100644
--- a/server/process.h
+++ b/server/process.h
@@ -66,8 +66,8 @@ struct process
     affinity_t           affinity;        /* process affinity mask */
     int                  priority;        /* priority class */
     int                  suspend;         /* global process suspend count */
-    int                  is_system;       /* is it a system process? */
-    unsigned int         create_flags;    /* process creation flags */
+    unsigned int         is_system:1;     /* is it a system process? */
+    unsigned int         debug_children:1;/* also debug all child processes */
     struct list          locks;           /* list of file locks owned by the process */
     struct list          classes;         /* window classes owned by the process */
     struct console_input*console;         /* console input */




More information about the wine-cvs mailing list