summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNguyễn Thái Ngọc Duy <pclouds@gmail.com>2018-11-03 08:48:39 (GMT)
committerJunio C Hamano <gitster@pobox.com>2018-11-05 04:42:11 (GMT)
commitc0e40a2d66e3b95d13bbc2e6e58d7b5c029d94ab (patch)
treee4ca6706ab8cd78073a11287d8d9e9b3e260aa91
parent10bc232d0f93957c42b2167f00fc3437b30b08b3 (diff)
downloadgit-c0e40a2d66e3b95d13bbc2e6e58d7b5c029d94ab.zip
git-c0e40a2d66e3b95d13bbc2e6e58d7b5c029d94ab.tar.gz
git-c0e40a2d66e3b95d13bbc2e6e58d7b5c029d94ab.tar.bz2
send-pack.c: move async's #ifdef NO_PTHREADS back to run-command.c
On systems that do not support multithread, start_async() is implemented with fork(). This implementation details unfortunately leak out at least in send-pack.c [1]. To keep the code base clean of NO_PTHREADS, move the this #ifdef back to run-command.c. The new wrapper function async_with_fork() at least helps suggest that this special "close()" is related to async in fork mode. [1] 09c9957cf7 (send-pack: avoid deadlock when pack-object dies early - 2011-04-25) Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>
-rw-r--r--run-command.c9
-rw-r--r--run-command.h1
-rw-r--r--send-pack.c5
3 files changed, 12 insertions, 3 deletions
diff --git a/run-command.c b/run-command.c
index 84b883c..3c3b881 100644
--- a/run-command.c
+++ b/run-command.c
@@ -1246,6 +1246,15 @@ int finish_async(struct async *async)
#endif
}
+int async_with_fork(void)
+{
+#ifdef NO_PTHREADS
+ return 1;
+#else
+ return 0;
+#endif
+}
+
const char *find_hook(const char *name)
{
static struct strbuf path = STRBUF_INIT;
diff --git a/run-command.h b/run-command.h
index 9b7f382..68f5369 100644
--- a/run-command.h
+++ b/run-command.h
@@ -141,6 +141,7 @@ struct async {
int start_async(struct async *async);
int finish_async(struct async *async);
int in_async(void);
+int async_with_fork(void);
void check_pipe(int err);
/**
diff --git a/send-pack.c b/send-pack.c
index e920ca5..f692686 100644
--- a/send-pack.c
+++ b/send-pack.c
@@ -203,9 +203,8 @@ static int receive_status(int in, struct ref *refs)
static int sideband_demux(int in, int out, void *data)
{
int *fd = data, ret;
-#ifdef NO_PTHREADS
- close(fd[1]);
-#endif
+ if (async_with_fork())
+ close(fd[1]);
ret = recv_sideband("send-pack", fd[0], out);
close(out);
return ret;