Explorar el Código

Correct error handling for thread creation

Error handling corrected for thread creation in case of e.g.
insufficient system resources.
z3APA3A hace 11 años
padre
commit
17665e1f8e
Se han modificado 1 ficheros con 9 adiciones y 5 borrados
  1. 9 5
      src/proxymain.c

+ 9 - 5
src/proxymain.c

@@ -460,22 +460,26 @@ int MODULEMAINFUNC (int argc, char** argv){
 #else
 	h = (HANDLE)CreateThread((LPSECURITY_ATTRIBUTES )NULL, (unsigned)32768, (BEGINTHREADFUNC)srv.pf, (void *) newparam, 0, &thread);
 #endif
-	newparam->threadid = (unsigned)thread;
+	srv.childcount++;
 	if (h) {
-		srv.childcount++;
+		newparam->threadid = (unsigned)thread;
 		CloseHandle(h);
 	}
 	else {
-		myfree(newparam);
+		sprintf((char *)buf, "_beginthreadex(): %s", _strerror(NULL));
+		if(!srv.silent)(*srv.logfunc)(&defparam, buf);
+		freeparam(newparam);
 	}
 #else
-	if((error = pthread_create(&thread, &pa, (PTHREADFUNC)srv.pf, (void *)newparam))){
+
+	error = pthread_create(&thread, &pa, (PTHREADFUNC)srv.pf, (void *)newparam);
+	srv.childcount++;
+	if(error){
 		sprintf((char *)buf, "pthread_create(): %s", strerror(error));
 		if(!srv.silent)(*srv.logfunc)(&defparam, buf);
 		freeparam(newparam);
 	}
 	else {
-		srv.childcount++;
 		newparam->threadid = (unsigned)thread;
 	}
 #endif