From 5ac4179df66747a7013a10d576c23531d2b4fc58 Mon Sep 17 00:00:00 2001
From: Guus Sliepen <guus@tinc-vpn.org>
Date: Sun, 17 Aug 2003 12:05:08 +0000
Subject: [PATCH] If we're not in main_loop() and the service is stopped, exit
 immediately.

---
 src/net.c     |  4 ++--
 src/process.c | 14 +++++++++-----
 2 files changed, 11 insertions(+), 7 deletions(-)

diff --git a/src/net.c b/src/net.c
index a8d7cc6e..7d8c58c0 100644
--- 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;
 
diff --git a/src/process.c b/src/process.c
index fd19f4d2..35296f04 100644
--- a/src/process.c
+++ b/src/process.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: 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)
-- 
2.39.5