diff --git a/src/sbbs3/services.c b/src/sbbs3/services.c index 78be5ad2792ec42e8b0853f9b2f4a6ba6621ee08..48f89fd3d1cc8cf91af63e1dca1d753617f550e5 100644 --- a/src/sbbs3/services.c +++ b/src/sbbs3/services.c @@ -1154,7 +1154,15 @@ static void native_service_thread(void* arg) void DLLCALL services_terminate(void) { + DWORD i; + terminated=TRUE; + for(i=0;i<services;i++) { + if(service[i].socket==INVALID_SOCKET) + continue; + close_socket(service[i].socket); + service[i].socket=INVALID_SOCKET; + } } #define NEXT_FIELD(p) while(*p && *p>' ') p++; while(*p && *p<=' ') p++; @@ -1520,6 +1528,10 @@ void DLLCALL services_thread(void* arg) if(service[i].socket>high_socket) high_socket=service[i].socket; } + if(high_socket==0) { /* No dynamic services? */ + YIELD(); + continue; + } tv.tv_sec=startup->sem_chk_freq; tv.tv_usec=0; if((result=select(high_socket+1,&socket_set,NULL,NULL,&tv))<1) {