Przeglądaj źródła

Correct error handling for thread creation

Error handling corrected for thread creation in case of e.g.
insufficient system resources.
z3APA3A 11 lat temu
rodzic
commit
17665e1f8e
1 zmienionych plików z 9 dodań i 5 usunięć
  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