From 0aa31424aa257e41129698de472bf76c42b9a6be Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Fri, 16 Nov 2001 00:53:27 +0000
Subject: [PATCH] Added support for hangup sound (on Win32). Client sockets are
 closed before waiting for services to terminate.

---
 src/sbbs3/services.c | 31 +++++++++++++++++++++++--------
 1 file changed, 23 insertions(+), 8 deletions(-)

diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index 7ee8f660e5..5713aa40a4 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -704,6 +704,12 @@ static void js_service_thread(void* arg)
 	if(service->clients)
 		service->clients--;
 
+#ifdef _WIN32
+	if(startup->hangup_sound[0] && !(startup->options&BBS_OPT_MUTE)
+		&& !(service->options&BBS_OPT_MUTE))
+		PlaySound(startup->hangup_sound, NULL, SND_ASYNC|SND_FILENAME);
+#endif
+
 	lprintf("%04d %s JavaScript service thread terminated (%u clients remain)"
 		, socket, service->protocol, service->clients);
 
@@ -821,6 +827,12 @@ static void native_service_thread(void* arg)
 	if(service->clients)
 		service->clients--;
 
+#ifdef _WIN32
+	if(startup->hangup_sound[0] && !(startup->options&BBS_OPT_MUTE)
+		&& !(service->options&BBS_OPT_MUTE))
+		PlaySound(startup->hangup_sound, NULL, SND_ASYNC|SND_FILENAME);
+#endif
+
 	lprintf("%04d %s service thread terminated (%u clients remain)"
 		,socket, service->protocol, service->clients);
 
@@ -1135,9 +1147,11 @@ void DLLCALL services_thread(void* arg)
 				continue;
 			}
 
+#ifdef _WIN32
 			if(startup->answer_sound[0] && !(startup->options&BBS_OPT_MUTE)
 				&& !(service[i].options&BBS_OPT_MUTE))
 				PlaySound(startup->answer_sound, NULL, SND_ASYNC|SND_FILENAME);
+#endif
 
 			if(trashcan(&scfg,host_ip,"ip")) {
 				lprintf("%04d !%s CLIENT BLOCKED in ip.can: %s"
@@ -1173,12 +1187,19 @@ void DLLCALL services_thread(void* arg)
 		}
 	}
 
+	/* Close Service Sockets */
+	for(i=0;i<(int)services;i++) {
+		if(service[i].socket!=INVALID_SOCKET)
+			close_socket(service[i].socket);
+		service[i].socket=INVALID_SOCKET;
+	}
+
 	/* Wait for Service Threads to terminate */
 	total_clients=0;
 	for(i=0;i<(int)services;i++) 
 		total_clients+=service[i].clients;
 	if(total_clients) {
-		lprintf("000 Waiting for %d clients to disconnect",total_clients);
+		lprintf("0000 Waiting for %d clients to disconnect",total_clients);
 		while(1) {
 			for(i=0;i<(int)services;i++) 
 				total_clients+=service[i].clients;
@@ -1186,13 +1207,7 @@ void DLLCALL services_thread(void* arg)
 				break;
 			mswait(500);
 		}
-	}
-
-	/* Close Service Sockets */
-	for(i=0;i<(int)services;i++) {
-		if(service[i].socket!=INVALID_SOCKET)
-			close_socket(service[i].socket);
-		service[i].socket=INVALID_SOCKET;
+		lprintf("0000 Finished waiting");
 	}
 
 	/* Free Service Data */
-- 
GitLab