From 9811593bef89eef9387c21193b91f8307a1bbd1d Mon Sep 17 00:00:00 2001
From: rswindell <>
Date: Sun, 2 Mar 2008 23:34:12 +0000
Subject: [PATCH] Automatically recycle whenever ctrl/services.ini is modified.

---
 src/sbbs3/services.c | 11 ++++++-----
 1 file changed, 6 insertions(+), 5 deletions(-)

diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c
index fc8e857ce0..d58eb94de3 100644
--- a/src/sbbs3/services.c
+++ b/src/sbbs3/services.c
@@ -1443,7 +1443,7 @@ void DLLCALL services_terminate(void)
 
 #define NEXT_FIELD(p)	FIND_WHITESPACE(p); SKIP_WHITESPACE(p)
 
-static service_t* read_services_ini(service_t* service, uint32_t* services)
+static service_t* read_services_ini(const char* services_ini, service_t* service, uint32_t* services)
 {
 	uint		i,j;
 	FILE*		fp;
@@ -1452,7 +1452,6 @@ static service_t* read_services_ini(service_t* service, uint32_t* services)
 	char		host[INI_MAX_VALUE_LEN];
 	char		prot[INI_MAX_VALUE_LEN];
 	char		portstr[INI_MAX_VALUE_LEN];
-	char		services_ini[MAX_PATH+1];
 	char**		sec_list;
 	str_list_t	list;
 	service_t*	np;
@@ -1463,8 +1462,6 @@ static service_t* read_services_ini(service_t* service, uint32_t* services)
 	uint32_t	options;
 	uint32_t	stack_size;
 
-	iniFileName(services_ini,sizeof(services_ini),scfg.ctrl_dir,"services.ini");
-
 	if((fp=fopen(services_ini,"r"))==NULL) {
 		lprintf(LOG_ERR,"!ERROR %d opening %s", errno, services_ini);
 		return(NULL);
@@ -1613,6 +1610,7 @@ void DLLCALL services_thread(void* arg)
 	char			host_ip[32];
 	char			compiler[32];
 	char			str[128];
+	char			services_ini[MAX_PATH+1];
 	SOCKADDR_IN		addr;
 	SOCKADDR_IN		client_addr;
 	socklen_t		client_addr_len;
@@ -1734,7 +1732,9 @@ void DLLCALL services_thread(void* arg)
 		if(uptime==0)
 			uptime=time(NULL);	/* this must be done *after* setting the timezone */
 
-		if((service=read_services_ini(service, &services))==NULL) {
+		iniFileName(services_ini,sizeof(services_ini),scfg.ctrl_dir,"services.ini");
+
+		if((service=read_services_ini(services_ini, service, &services))==NULL) {
 			cleanup(1);
 			return;
 		}
@@ -1844,6 +1844,7 @@ void DLLCALL services_thread(void* arg)
 		recycle_semfiles=semfile_list_init(scfg.ctrl_dir,"recycle","services");
 		SAFEPRINTF(path,"%sservices.rec",scfg.ctrl_dir);	/* legacy */
 		semfile_list_add(&recycle_semfiles,path);
+		semfile_list_add(&recycle_semfiles,services_ini);
 		if(!initialized) {
 			semfile_list_check(&initialized,recycle_semfiles);
 			semfile_list_check(&initialized,shutdown_semfiles);
-- 
GitLab