Commit d083a7bd authored by Alexandre Julliard's avatar Alexandre Julliard

Fixed DEBUG_ONLY_THIS_PROCESS again (thanks to Ulrich Weigand).

parent ad47a30f
...@@ -533,11 +533,6 @@ PDB *PROCESS_Create( NE_MODULE *pModule, LPCSTR cmd_line, LPCSTR env, ...@@ -533,11 +533,6 @@ PDB *PROCESS_Create( NE_MODULE *pModule, LPCSTR cmd_line, LPCSTR env,
info->hThread = info->hProcess = INVALID_HANDLE_VALUE; info->hThread = info->hProcess = INVALID_HANDLE_VALUE;
if (!(load_done_evt = CreateEventA( NULL, TRUE, FALSE, NULL ))) goto error; if (!(load_done_evt = CreateEventA( NULL, TRUE, FALSE, NULL ))) goto error;
/* the DEBUG_ONLY_THIS_PROCESS flag seems simply equivalent
* to DEBUG_PROCESS, contrary to Microsoft documentation (surprised?) */
if (flags & DEBUG_ONLY_THIS_PROCESS)
flags = (flags & ~DEBUG_ONLY_THIS_PROCESS) | DEBUG_PROCESS;
/* Create the process on the server side */ /* Create the process on the server side */
req->inherit = (psa && (psa->nLength >= sizeof(*psa)) && psa->bInheritHandle); req->inherit = (psa && (psa->nLength >= sizeof(*psa)) && psa->bInheritHandle);
......
...@@ -67,12 +67,21 @@ static struct process *create_process( struct process *parent, struct new_proces ...@@ -67,12 +67,21 @@ static struct process *create_process( struct process *parent, struct new_proces
process->priority = NORMAL_PRIORITY_CLASS; process->priority = NORMAL_PRIORITY_CLASS;
process->affinity = 1; process->affinity = 1;
process->suspend = 0; process->suspend = 0;
process->create_flags = 0;
process->console_in = NULL; process->console_in = NULL;
process->console_out = NULL; process->console_out = NULL;
process->init_event = NULL; process->init_event = NULL;
process->info = NULL; process->info = NULL;
gettimeofday( &process->start_time, NULL ); gettimeofday( &process->start_time, NULL );
/* copy the request structure */
if (!(process->info = mem_alloc( sizeof(*process->info) + len ))) goto error;
memcpy( process->info, req, sizeof(*req) );
memcpy( process->info->cmdline, cmd_line, len );
process->info->cmdline[len] = 0;
req = process->info; /* use the copy now */
process->create_flags = req->create_flags;
if (req->inherit_all) if (req->inherit_all)
process->handles = copy_handle_table( process, parent ); process->handles = copy_handle_table( process, parent );
else else
...@@ -82,11 +91,6 @@ static struct process *create_process( struct process *parent, struct new_proces ...@@ -82,11 +91,6 @@ static struct process *create_process( struct process *parent, struct new_proces
/* alloc a handle for the process itself */ /* alloc a handle for the process itself */
alloc_handle( process, process, PROCESS_ALL_ACCESS, 0 ); alloc_handle( process, process, PROCESS_ALL_ACCESS, 0 );
if (!(process->info = mem_alloc( sizeof(*process->info) + len ))) goto error;
memcpy( process->info, req, sizeof(*req) );
memcpy( process->info->cmdline, cmd_line, len );
process->info->cmdline[len] = 0;
/* get the init done event */ /* get the init done event */
if (req->event != -1) if (req->event != -1)
{ {
...@@ -95,11 +99,11 @@ static struct process *create_process( struct process *parent, struct new_proces ...@@ -95,11 +99,11 @@ static struct process *create_process( struct process *parent, struct new_proces
} }
/* set the process console */ /* set the process console */
if (req->create_flags & CREATE_NEW_CONSOLE) if (process->create_flags & CREATE_NEW_CONSOLE)
{ {
if (!alloc_console( process )) goto error; if (!alloc_console( process )) goto error;
} }
else if (!(req->create_flags & DETACHED_PROCESS)) else if (!(process->create_flags & DETACHED_PROCESS))
{ {
if (parent->console_in) process->console_in = grab_object( parent->console_in ); if (parent->console_in) process->console_in = grab_object( parent->console_in );
if (parent->console_out) process->console_out = grab_object( parent->console_out ); if (parent->console_out) process->console_out = grab_object( parent->console_out );
...@@ -116,9 +120,9 @@ static struct process *create_process( struct process *parent, struct new_proces ...@@ -116,9 +120,9 @@ static struct process *create_process( struct process *parent, struct new_proces
} }
/* attach to the debugger if requested */ /* attach to the debugger if requested */
if (req->create_flags & DEBUG_PROCESS) if (process->create_flags & (DEBUG_PROCESS | DEBUG_ONLY_THIS_PROCESS))
debugger_attach( process, current ); debugger_attach( process, current );
else if (parent && parent->debugger && !(req->create_flags & DEBUG_ONLY_THIS_PROCESS)) else if (parent && parent->debugger && !(parent->create_flags & DEBUG_ONLY_THIS_PROCESS))
debugger_attach( process, parent->debugger ); debugger_attach( process, parent->debugger );
if ((process->next = first_process) != NULL) process->next->prev = process; if ((process->next = first_process) != NULL) process->next->prev = process;
......
...@@ -30,6 +30,7 @@ struct process ...@@ -30,6 +30,7 @@ struct process
int priority; /* priority class */ int priority; /* priority class */
int affinity; /* process affinity mask */ int affinity; /* process affinity mask */
int suspend; /* global process suspend count */ int suspend; /* global process suspend count */
int create_flags; /* process creation flags */
struct object *console_in; /* console input */ struct object *console_in; /* console input */
struct object *console_out; /* console output */ struct object *console_out; /* console output */
struct event *init_event; /* event for init done */ struct event *init_event; /* event for init done */
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment