From 17665e1f8ee66f073533a20dae6dec277ec6d593 Mon Sep 17 00:00:00 2001 From: z3APA3A <3APA3A@3proxy.ru> Date: Fri, 15 Aug 2014 18:48:06 +0400 Subject: [PATCH] Correct error handling for thread creation Error handling corrected for thread creation in case of e.g. insufficient system resources. --- src/proxymain.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/proxymain.c b/src/proxymain.c index ff22a9b..f0f5a8c 100644 --- a/src/proxymain.c +++ b/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