If we're not in main_loop() and the service is stopped, exit immediately.
authorGuus Sliepen <guus@tinc-vpn.org>
Sun, 17 Aug 2003 12:05:08 +0000 (12:05 +0000)
committerGuus Sliepen <guus@tinc-vpn.org>
Sun, 17 Aug 2003 12:05:08 +0000 (12:05 +0000)
src/net.c
src/process.c

index a8d7cc6e0e5f0b23aeb8a7808103e09d17828376..7d8c58c0f4ec66a9a9d1a215f7e83677ee6fcc41 100644 (file)
--- a/src/net.c
+++ b/src/net.c
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: net.c,v 1.35.4.196 2003/08/02 20:50:38 guus Exp $
+    $Id: net.c,v 1.35.4.197 2003/08/17 12:05:08 guus Exp $
 */
 
 #include "system.h"
@@ -42,7 +42,7 @@
 #include "xalloc.h"
 
 bool do_purge = false;
-volatile bool running;
+volatile bool running = false;
 
 time_t now = 0;
 
index fd19f4d2b12980e2c10e94b58b64ba2a6b55a440..35296f041b8a18f1b37f7599ee000d57b2a6b2a7 100644 (file)
@@ -17,7 +17,7 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: process.c,v 1.1.2.72 2003/08/16 12:11:11 guus Exp $
+    $Id: process.c,v 1.1.2.73 2003/08/17 12:05:08 guus Exp $
 */
 
 #include "system.h"
@@ -171,24 +171,28 @@ DWORD WINAPI controlhandler(DWORD request, DWORD type, LPVOID boe, LPVOID bah) {
        switch(request) {
                case SERVICE_CONTROL_STOP:
                        logger(LOG_NOTICE, _("Got %s request"), "SERVICE_CONTROL_STOP");
-                       running = false;
                        break;
                case SERVICE_CONTROL_SHUTDOWN:
                        logger(LOG_NOTICE, _("Got %s request"), "SERVICE_CONTROL_SHUTDOWN");
-                       running = false;
                        break;
                default:
                        logger(LOG_WARNING, _("Got unexpected request %d"), request);
                        return ERROR_CALL_NOT_IMPLEMENTED;
        }
 
-       if(!running) {
+       if(running) {
+               running = false;
                status.dwWaitHint = 30000; 
                status.dwCurrentState = SERVICE_STOP_PENDING; 
                SetServiceStatus(statushandle, &status);
+               return NO_ERROR;
+       } else {
+               status.dwWaitHint = 0; 
+               status.dwCurrentState = SERVICE_STOPPED; 
+               SetServiceStatus(statushandle, &status);
+               exit(1);
        }
 
-       return NO_ERROR;
 }
 
 VOID WINAPI run_service(DWORD argc, LPTSTR* argv)