From ca1decd0a9ca543b1bfddd71b5818a0983e3bb03 Mon Sep 17 00:00:00 2001
From: Rob Swindell <rob@synchro.net>
Date: Sun, 13 Sep 2020 13:54:38 -0700
Subject: [PATCH] Fix new crash when recycling introduced in 3b0dd501f6a

active_clients is destroyed in cleanup(), so it must be re-initialized inside
the server init/recycle loop.
---
 src/sbbs3/ftpsrvr.c  | 3 ++-
 src/sbbs3/mailsrvr.c | 3 ++-
 src/sbbs3/websrvr.c  | 3 ++-
 3 files changed, 6 insertions(+), 3 deletions(-)

diff --git a/src/sbbs3/ftpsrvr.c b/src/sbbs3/ftpsrvr.c
index f67899d860..9e9065a678 100644
--- a/src/sbbs3/ftpsrvr.c
+++ b/src/sbbs3/ftpsrvr.c
@@ -6049,9 +6049,10 @@ void DLLCALL ftp_server(void* arg)
 	startup->shutdown_now=FALSE;
 	terminate_server=FALSE;
 	protected_uint32_init(&thread_count, 0);
-	protected_uint32_init(&active_clients, 0);
 
 	do {
+		protected_uint32_init(&active_clients, 0);
+
 		/* Setup intelligent defaults */
 		if(startup->port==0)					startup->port=IPPORT_FTP;
 		if(startup->qwk_timeout==0)				startup->qwk_timeout=FTP_DEFAULT_QWK_TIMEOUT;		/* seconds */
diff --git a/src/sbbs3/mailsrvr.c b/src/sbbs3/mailsrvr.c
index 44607a9e5c..24fd1bd8bd 100644
--- a/src/sbbs3/mailsrvr.c
+++ b/src/sbbs3/mailsrvr.c
@@ -6012,9 +6012,10 @@ void DLLCALL mail_server(void* arg)
 
 	SetThreadName("sbbs/mailServer");
 	protected_uint32_init(&thread_count, 0);
-	protected_uint32_init(&active_clients, 0);
 
 	do {
+		protected_uint32_init(&active_clients, 0);
+
 		/* Setup intelligent defaults */
 		if(startup->relay_port==0)				startup->relay_port=IPPORT_SMTP;
 		if(startup->submission_port==0)			startup->submission_port=IPPORT_SUBMISSION;
diff --git a/src/sbbs3/websrvr.c b/src/sbbs3/websrvr.c
index bfabe167b4..0a7223450d 100644
--- a/src/sbbs3/websrvr.c
+++ b/src/sbbs3/websrvr.c
@@ -6954,9 +6954,10 @@ void DLLCALL web_server(void* arg)
 	startup->shutdown_now=FALSE;
 	terminate_server=FALSE;
 	protected_uint32_init(&thread_count, 0);
-	protected_uint32_init(&active_clients,0);
 
 	do {
+		protected_uint32_init(&active_clients,0);
+
 		/* Setup intelligent defaults */
 		if(startup->port==0)					startup->port=IPPORT_HTTP;
 		if(startup->root_dir[0]==0)				SAFECOPY(startup->root_dir,WEB_DEFAULT_ROOT_DIR);
-- 
GitLab