Re: [PATCH 3/4] run-command: allow aborting async code prematurely
From: Erik Faye-Lund <hidden>
Date: 2016-06-15 22:50:57
On Thu, Mar 31, 2011 at 8:44 PM, Jeff King [off-list ref] wrote:
quoted hunk ↗ jump to hunk
We provide only two abstract promitives for async code: start and finish. Where "finish" means to wait until the async code tells us it is done. However, it may also be useful for us to to tell the async code to abort right away, because whatever it was doing is no longer useful. For a separate process, we just kill() it. For Windows, we need to do whatever the equivalent to pthread_cancel is. Signed-off-by: Jeff King <redacted> --- run-command.c | 10 ++++++++++ run-command.h | 1 + 2 files changed, 11 insertions(+), 0 deletions(-)diff --git a/run-command.c b/run-command.c index 258c880..f179d2a 100644 --- a/run-command.c +++ b/run-command.c@@ -439,6 +439,16 @@ int finish_async(struct async *async)return ret; } +void abort_async(struct async *async) +{ +#ifndef WIN32 + kill(async->pid, 15);
This doesn't compile unless NO_PTHREADS is set, no?
+#else + /* no clue */ +#endif + finish_async(async); +} +
This should probably be
void abort_async(struct async *async)
{
#ifdef NO_PTHREADS
kill(async->pid, 15);
#else
pthread_cancel(async->tid)
#endif
finish_async(async);
}
... and then us Windows-guys must implement something like pthread_cancel().
Or maybe not. Can pthread reliably cancel a thread while making sure
that thread isn't holding a mutex (like some thread-safe malloc
implementations do)? If not, I'm not entirely sure we can even reach
this goal.