--- ../SOURCES/libmicrohttpd-0.9.27/src/microhttpd/daemon.c 2013-08-06 13:05:12.574432427 -0500 +++ libmicrohttpd-0.9.27/src/microhttpd/daemon.c 2013-08-07 10:48:52.423404283 -0500 @@ -1388,7 +1388,11 @@ /* drain signaling pipe to avoid spinning select */ if ( (-1 != daemon->wpipe[0]) && (FD_ISSET (daemon->wpipe[0], read_fd_set)) ) +#ifndef WINDOWS (void) read (daemon->wpipe[0], &tmp, sizeof (tmp)); +#else + ReadFile((HANDLE) daemon->wpipe[0], &tmp, sizeof (tmp), NULL, NULL); +#endif if (0 == (daemon->options & MHD_USE_THREAD_PER_CONNECTION)) { @@ -1441,9 +1445,6 @@ DWORD dwBytes; #endif -#ifdef WINDOWS -loop_select: -#endif timeout.tv_sec = 0; timeout.tv_usec = 0; if (MHD_YES == daemon->shutdown) @@ -1544,15 +1545,22 @@ { if (! PeekNamedPipe((HANDLE) daemon->wpipe[0], NULL, 0, NULL, &dwBytes, NULL)) { - goto loop_select; + FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | + FORMAT_MESSAGE_FROM_SYSTEM | + FORMAT_MESSAGE_IGNORE_INSERTS, + NULL, + (DWORD) GetLastError(), + MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), + (LPTSTR) &msgBuffer, + 0, NULL); + MHD_DLOG (daemon, "PeekNamedPipe failed: %s\n", msgBuffer); + LocalFree(msgBuffer); + return MHD_NO; } - else if (dwBytes) + + if (dwBytes) FD_SET (daemon->wpipe[0], &rs); - else - goto loop_select; } - else - goto loop_select; } #endif @@ -2837,7 +2845,11 @@ } if (-1 != daemon->wpipe[1]) { +#ifndef WINDOWS if (1 != write (daemon->wpipe[1], "e", 1)) +#else + if (! WriteFile ((HANDLE) daemon->wpipe[1], (LPCVOID) "e", 1, NULL, NULL)) +#endif MHD_PANIC ("failed to signal shutdownn via pipe"); } #ifdef HAVE_LISTEN_SHUTDOWN