From 6d2063f41b5774f15ee399069962e5844357e755 Mon Sep 17 00:00:00 2001 From: Alexandre Julliard Date: Mon, 16 Jan 2012 14:04:39 +0100 Subject: [PATCH] ntdll: Set the thread exit code when a thread is killed inside a wait. --- dlls/ntdll/sync.c | 4 +--- server/thread.c | 2 +- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/dlls/ntdll/sync.c b/dlls/ntdll/sync.c index 3e27d09d7ee..f759ce6e7a5 100644 --- a/dlls/ntdll/sync.c +++ b/dlls/ntdll/sync.c @@ -807,7 +807,7 @@ static int wait_reply( void *cookie ) ret = read( ntdll_get_thread_data()->wait_fd[0], &reply, 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; /* we stole another reply, wait for the real one */ signaled = wait_reply( cookie ); @@ -826,8 +826,6 @@ static int wait_reply( void *cookie ) if (errno == EINTR) continue; server_protocol_perror("wakeup read"); } - /* the server closed the connection; time to die... */ - abort_thread(0); } diff --git a/server/thread.c b/server/thread.c index f704473fc59..f9a575eae13 100644 --- a/server/thread.c +++ b/server/thread.c @@ -986,7 +986,7 @@ void kill_thread( struct thread *thread, int violent_death ) if (thread->wait) { 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 */ violent_death = 0; }