From d72c1dd71042d815d2f423c7147fc2bd5293208b Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Thu, 9 Oct 2003 03:17:59 +0000
Subject: [PATCH] Recycle semaphroe names now include the word "Recycle". Now
 only terminates services during shutdown if start button is enabled.

---
 src/sbbs3/ctrl/MainFormUnit.cpp | 55 +++++++++++++++++++++++++++------
 1 file changed, 45 insertions(+), 10 deletions(-)

diff --git a/src/sbbs3/ctrl/MainFormUnit.cpp b/src/sbbs3/ctrl/MainFormUnit.cpp
index 15e7c6d991..adabb0ee6a 100644
--- a/src/sbbs3/ctrl/MainFormUnit.cpp
+++ b/src/sbbs3/ctrl/MainFormUnit.cpp
@@ -847,7 +847,8 @@ void __fastcall TMainForm::FormCloseQuery(TObject *Sender, bool &CanClose)
             return;
         FtpStopExecute(Sender);
     }
-    ServicesStopExecute(Sender);
+    if(ServicesStop->Enabled)
+	    ServicesStopExecute(Sender);
 
     CanClose=true;
 }
@@ -3025,32 +3026,66 @@ void __fastcall TMainForm::UserTruncateMenuItemClick(TObject *Sender)
 }
 //---------------------------------------------------------------------------
 
-
 void __fastcall TMainForm::MailRecycleExecute(TObject *Sender)
 {
-	mail_startup.recycle_now=true;
-    MailRecycle->Enabled=false;
+	HANDLE recycle_sem;
+    char name[256];
+    sprintf(name,"%sRecycle",NTSVC_NAME_MAIL);
+	if((recycle_sem=OpenSemaphore(SEMAPHORE_MODIFY_STATE,FALSE,name))!=NULL) {
+		ReleaseSemaphore(recycle_sem,1,NULL);
+        CloseHandle(recycle_sem);
+    } else {
+		mail_startup.recycle_now=true;
+	    MailRecycle->Enabled=false;
+    }
 }
 //---------------------------------------------------------------------------
 
 void __fastcall TMainForm::FtpRecycleExecute(TObject *Sender)
 {
-	ftp_startup.recycle_now=true;
-    FtpRecycle->Enabled=false;
+	HANDLE recycle_sem;
+    char name[256];
+    sprintf(name,"%sRecycle",NTSVC_NAME_FTP);
+	if((recycle_sem=OpenSemaphore(SEMAPHORE_MODIFY_STATE,FALSE,name))!=NULL) {
+		ReleaseSemaphore(recycle_sem,1,NULL);
+        CloseHandle(recycle_sem);
+    } else {
+		ftp_startup.recycle_now=true;
+	    FtpRecycle->Enabled=false;
+    }
 }
 //---------------------------------------------------------------------------
 
 void __fastcall TMainForm::ServicesRecycleExecute(TObject *Sender)
 {
-	services_startup.recycle_now=true;
-    ServicesRecycle->Enabled=false;
+	HANDLE recycle_sem;
+    char name[256];
+    sprintf(name,"%sRecycle",NTSVC_NAME_SERVICES);
+	if((recycle_sem=OpenSemaphore(SEMAPHORE_MODIFY_STATE,FALSE,name))!=NULL) {
+		ReleaseSemaphore(recycle_sem,1,NULL);
+        CloseHandle(recycle_sem);
+    } else {
+		services_startup.recycle_now=true;
+	    ServicesRecycle->Enabled=false;
+    }
 }
 //---------------------------------------------------------------------------
 
 void __fastcall TMainForm::TelnetRecycleExecute(TObject *Sender)
 {
-	bbs_startup.recycle_now=true;
-    TelnetRecycle->Enabled=false;
+	HANDLE recycle_sem;
+    char name[256];
+    sprintf(name,"%sRecycle",NTSVC_NAME_BBS);
+	if((recycle_sem=OpenSemaphore(SEMAPHORE_MODIFY_STATE,FALSE,name))!=NULL) {
+		ReleaseSemaphore(recycle_sem,1,NULL);
+        CloseHandle(recycle_sem);
+    } else {
+    	char error[256];
+        sprintf(error,"ERROR %d opening semaphore: %s",GetLastError(),NTSVC_NAME_BBS);
+        bbs_lputs(NULL,error);
+		bbs_startup.recycle_now=true;
+	    TelnetRecycle->Enabled=false;
+    }
 }
 //---------------------------------------------------------------------------
 
-- 
GitLab