 
            From: Paul Gofman pgofman@codeweavers.com
--- server/process.c | 31 +++++++++++++++++-------------- 1 file changed, 17 insertions(+), 14 deletions(-)
diff --git a/server/process.c b/server/process.c index b0dd947d628..f037562a82b 100644 --- a/server/process.c +++ b/server/process.c @@ -657,6 +657,7 @@ struct process *create_process( int fd, struct process *parent, unsigned int fla unsigned int handle_count, struct token *token ) { struct process *process; + struct job *job;
if (!(process = alloc_object( &process_ops ))) { @@ -753,6 +754,22 @@ struct process *create_process( int fd, struct process *parent, unsigned int fla process->session_id = token_get_session_id( process->token );
set_fd_events( process->msg_fd, POLLIN ); /* start listening to events */ + + if (!parent) return process; + job = parent->job; + while (job) + { + if (!(job->limit_flags & JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK) + && !(flags & PROCESS_CREATE_FLAGS_BREAKAWAY + && job->limit_flags & JOB_OBJECT_LIMIT_BREAKAWAY_OK)) + { + add_job_process( job, process ); + assert( !get_error() ); + break; + } + job = job->parent; + } + return process;
error: @@ -1327,20 +1344,6 @@ DECL_HANDLER(new_process) process->machine = req->machine; process->startup_info = (struct startup_info *)grab_object( info );
- job = parent->job; - while (job) - { - if (!(job->limit_flags & JOB_OBJECT_LIMIT_SILENT_BREAKAWAY_OK) - && !(req->flags & PROCESS_CREATE_FLAGS_BREAKAWAY - && job->limit_flags & JOB_OBJECT_LIMIT_BREAKAWAY_OK)) - { - add_job_process( job, process ); - assert( !get_error() ); - break; - } - job = job->parent; - } - for (i = 0; i < job_handle_count; ++i) { job = get_job_obj( current->process, job_handles[i], JOB_OBJECT_ASSIGN_PROCESS );