These functions will aid the Windows port of git-daemon. Signed-off-by: Erik Faye-Lund <kusmabite@xxxxxxxxx> --- run-command.c | 27 +++++++++++++++++++++++++++ run-command.h | 2 ++ 2 files changed, 29 insertions(+), 0 deletions(-) diff --git a/run-command.c b/run-command.c index cf2d8f7..e5a0e06 100644 --- a/run-command.c +++ b/run-command.c @@ -373,6 +373,33 @@ int finish_async(struct async *async) return ret; } +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()); + else if (!GetExitCodeThread(async->tid, &ret)) + ret = error("cannot get thread exit code: %lu", GetLastError()); + return ret; +#endif +} + +int is_async_alive(struct async *async) +{ +#ifndef WIN32 + int dummy; + return waitpid(async->pid, &dummy, WNOHANG); +#else + int ret = WaitForSingleObject(async->tid, 0); + if (ret == WAIT_FAILED) + return error("checking thread state failed: %lu", GetLastError()); + return ret != WAIT_OBJECT_0; +#endif +} + int run_hook(const char *index_file, const char *name, ...) { struct child_process hook; diff --git a/run-command.h b/run-command.h index fb34209..955b0bd 100644 --- a/run-command.h +++ b/run-command.h @@ -80,5 +80,7 @@ struct async { int start_async(struct async *async); int finish_async(struct async *async); +int kill_async(struct async *async); +int is_async_alive(struct async *async); #endif -- 1.6.5.rc2.7.g4f8d3 -- 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