Skip to content
Snippets Groups Projects
Commit 7f74824d authored by Alexandre Julliard's avatar Alexandre Julliard
Browse files

Fixed error recovery during thread creation.

parent e5557b35
No related branches found
No related tags found
No related merge requests found
......@@ -178,13 +178,12 @@ struct thread *create_process( int fd )
if ((process->next = first_process) != NULL) process->next->prev = process;
first_process = process;
/* create the main thread */
if (!(thread = create_thread( fd, process ))) goto error;
/* create the init done event */
if (!(process->init_event = create_event( NULL, 0, 1, 0 ))) goto error;
add_process_thread( process, thread );
/* create the main thread */
if (!(thread = create_thread( fd, process ))) goto error;
release_object( process );
return thread;
......
......@@ -91,7 +91,11 @@ static int alloc_client_buffer( struct thread *thread )
struct get_thread_buffer_request *req;
int fd, fd_pipe[2];
if (pipe( fd_pipe ) == -1) return -1;
if (pipe( fd_pipe ) == -1)
{
file_set_error();
return 0;
}
if ((fd = create_anonymous_file()) == -1) goto error;
if (ftruncate( fd, MAX_REQUEST_LENGTH ) == -1) goto error;
if ((thread->buffer = mmap( 0, MAX_REQUEST_LENGTH, PROT_READ | PROT_WRITE,
......@@ -106,6 +110,9 @@ static int alloc_client_buffer( struct thread *thread )
req->boot = (thread == booting_thread);
req->version = SERVER_PROTOCOL_VERSION;
/* add it here since send_client_fd may call kill_thread */
add_process_thread( thread->process, thread );
send_client_fd( thread, fd_pipe[0], -1 );
send_client_fd( thread, fd, -1 );
send_reply( thread );
......@@ -695,10 +702,9 @@ DECL_HANDLER(new_thread)
send_client_fd( current, sock[1], req->handle );
close( sock[1] );
/* thread object will be released when the thread gets killed */
add_process_thread( current->process, thread );
return;
}
release_object( thread );
kill_thread( thread, 1 );
}
close( sock[1] );
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment