]> git.pond.sub.org Git - empserver/commitdiff
Fix Windows client's stdin read thread's error handling
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 25 Apr 2009 07:43:48 +0000 (09:43 +0200)
committerMarkus Armbruster <armbru@pond.sub.org>
Sat, 25 Apr 2009 08:16:27 +0000 (10:16 +0200)
stdin_read_thread() zeroed bounce_status on failure, effectifely
treating it like EOF.  Fix by setting to -1.

It treated main thread termination like failure, and set bounce_error
to a bogus value.  Can't happen, because the program terminates when
the main thread terminates, and the only user of bounce_error is the
main thread anyway.  Regardless, handle the case by terminating,
because that's more obviously correct.

Broken in commit f082ef9f, v4.3.11.

src/client/play.c

index 6d74382e3eb25f3224fef5893cdd33903f1b1b02..4b9f3d7a69098dae533579bd46b613423be53aad 100644 (file)
@@ -136,12 +136,19 @@ static DWORD WINAPI
 stdin_read_thread(LPVOID lpParam)
 {
     for (;;) {
-       if (WaitForSingleObject(bounce_empty, INFINITE) != WAIT_OBJECT_0) {
-           bounce_status = 0;
+       switch (WaitForSingleObject(bounce_empty, INFINITE)) {
+       case WAIT_FAILED:
+           bounce_status = -1;
            bounce_error = GetLastError();
-       } else {
+           break;
+       case WAIT_OBJECT_0:
            bounce_status = _read(0, bounce_buf, sizeof(bounce_buf));
            bounce_error = errno;
+           break;
+       case WAIT_ABANDONED:
+           return 0;
+       default:
+           assert(0);
        }
        SetEvent(bounce_full);
     }