From: Johannes Sixt Date: Thu, 26 Nov 2009 21:46:13 GMT Subject: Re: [msysGit] [PATCH/RFC 06/11] run-command: add kill_async() and is_async_alive() Message-ID: <200911262246.13342.j6t@kdbg.org> In-Reply-To: <1259196260-3064-7-git-send-email-kusmabite@gmail.com> On Donnerstag, 26. November 2009, Erik Faye-Lund wrote: > +int kill_async(struct async *async) > +{ > +#ifndef WIN32 > + return kill(async->pid, SIGTERM); > +#else > + DWORD ret = 0; > + if (!TerminateThread(async->tid, 0)) > + ret = error("killing thread failed: %lu", GetLastError()); Ugh! Did you read the documentation of TerminateThread()? We need to kill processes/threads when we detect that there are too many connections. But TerminateThread() is such a dangerous function that we cannot pretend that everything is good, and we continue to accept connections. Unless we find a different solution, I would prefer to punt and die instead. > + else if (!GetExitCodeThread(async->tid, &ret)) > + ret = error("cannot get thread exit code: %lu", GetLastError()); What should the exit code be good for? The return value of this function can only be -1 (failure, could not kill) or 0 (success, process killed). -- Hannes