fix possible crash on user deletion
[srvx.git] / src / ioset-win32.c
index 7be12b06c70ca6dbaa300f7e23361af3528d6527..15b3cbdc0ae54d998fef4693f02051c2e1e6a15b 100644 (file)
@@ -82,6 +82,10 @@ ioset_win32_wndproc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
         events = WSAGETSELECTEVENT(lParam);
         err = WSAGETSELECTERROR(lParam);
         ioset_events(fd, (events & (FD_READ | FD_ACCEPT | FD_CLOSE)) != 0, (events & (FD_WRITE | FD_CONNECT)) != 0);
+        return 0;
+    case WM_QUIT:
+        quit_services = wParam;
+        return 0;
     }
     return DefWindowProc(hWnd, uMsg, wParam, lParam);
 }
@@ -99,6 +103,7 @@ ioset_win32_init(void)
     if (res)
     {
         log_module(MAIN_LOG, LOG_FATAL, "Unable to start Windows Sockets (%d)", res);
+        return 0;
     }
 
     // Get Windows HINSTANCE.
@@ -113,15 +118,17 @@ ioset_win32_init(void)
     if (!RegisterClassEx(&wcx))
     {
         log_module(MAIN_LOG, LOG_FATAL, "Unable to register window class (%lu)", GetLastError());
+        return 0;
     }
 
     ioset_window = CreateWindow("srvxMainWindow", PACKAGE_STRING, WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hinst, NULL);
     if (!ioset_window)
     {
         log_module(MAIN_LOG, LOG_FATAL, "Unable to create window (%lu)", GetLastError());
+        return 0;
     }
 
-    return 0;
+    return 1;
 }
 
 static long
@@ -249,6 +256,9 @@ ioset_win32_loop(struct timeval *timeout)
     }
     else
     {
+        extern int clock_skew;
+
+        now = time(NULL) + clock_skew;
         TranslateMessage(&msg);
         DispatchMessage(&msg);
     }