Commit 6d2063f4 authored by Alexandre Julliard's avatar Alexandre Julliard

ntdll: Set the thread exit code when a thread is killed inside a wait.

parent 89eaa56a
...@@ -807,7 +807,7 @@ static int wait_reply( void *cookie ) ...@@ -807,7 +807,7 @@ static int wait_reply( void *cookie )
ret = read( ntdll_get_thread_data()->wait_fd[0], &reply, sizeof(reply) ); ret = read( ntdll_get_thread_data()->wait_fd[0], &reply, sizeof(reply) );
if (ret == sizeof(reply)) if (ret == sizeof(reply))
{ {
if (!reply.cookie) break; /* thread got killed */ if (!reply.cookie) abort_thread( reply.signaled ); /* thread got killed */
if (wine_server_get_ptr(reply.cookie) == cookie) return reply.signaled; if (wine_server_get_ptr(reply.cookie) == cookie) return reply.signaled;
/* we stole another reply, wait for the real one */ /* we stole another reply, wait for the real one */
signaled = wait_reply( cookie ); signaled = wait_reply( cookie );
...@@ -826,8 +826,6 @@ static int wait_reply( void *cookie ) ...@@ -826,8 +826,6 @@ static int wait_reply( void *cookie )
if (errno == EINTR) continue; if (errno == EINTR) continue;
server_protocol_perror("wakeup read"); server_protocol_perror("wakeup read");
} }
/* the server closed the connection; time to die... */
abort_thread(0);
} }
......
...@@ -986,7 +986,7 @@ void kill_thread( struct thread *thread, int violent_death ) ...@@ -986,7 +986,7 @@ void kill_thread( struct thread *thread, int violent_death )
if (thread->wait) if (thread->wait)
{ {
while (thread->wait) end_wait( thread ); while (thread->wait) end_wait( thread );
send_thread_wakeup( thread, 0, STATUS_PENDING ); send_thread_wakeup( thread, 0, thread->exit_code );
/* if it is waiting on the socket, we don't need to send a SIGQUIT */ /* if it is waiting on the socket, we don't need to send a SIGQUIT */
violent_death = 0; violent_death = 0;
} }
......
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