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 -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html