Quellcode durchsuchen

Prevent deadlock on thread creation error

z3APA3A vor 8 Jahren
Ursprung
Commit
46211c26d2
1 geänderte Dateien mit 4 neuen und 2 gelöschten Zeilen
  1. 4 2
      src/proxymain.c

+ 4 - 2
src/proxymain.c

@@ -643,6 +643,7 @@ int MODULEMAINFUNC (int argc, char** argv){
 	}
 #endif
 	newparam->prev = newparam->next = NULL;
+	error = 0;
 	pthread_mutex_lock(&srv.counter_mutex);
 	if(!srv.child){
 		srv.child = newparam;
@@ -665,7 +666,7 @@ int MODULEMAINFUNC (int argc, char** argv){
 	else {
 		sprintf((char *)buf, "_beginthreadex(): %s", _strerror(NULL));
 		if(!srv.silent)(*srv.logfunc)(&defparam, buf);
-		freeparam(newparam);
+		error = 1;
 	}
 #else
 
@@ -674,13 +675,14 @@ int MODULEMAINFUNC (int argc, char** argv){
 	if(error){
 		sprintf((char *)buf, "pthread_create(): %s", strerror(error));
 		if(!srv.silent)(*srv.logfunc)(&defparam, buf);
-		freeparam(newparam);
 	}
 	else {
 		newparam->threadid = (unsigned)thread;
 	}
 #endif
 	pthread_mutex_unlock(&srv.counter_mutex);
+	if(error) freeparam(newparam);
+
 	memset(&defparam.sincl, 0, sizeof(defparam.sincl));
 	memset(&defparam.sincr, 0, sizeof(defparam.sincr));
 	if(isudp) while(!srv.fds.events)usleep(SLEEPTIME);