If index-helper puts 'W' before pid in $GIT_DIR/index-helper.pid, then git will sleep for a while, expecting to be waken up by SIGUSR1 when index-helper has done shm preparation, or after the timeout. Signed-off-by: Nguyễn Thái Ngọc Duy <pclouds@xxxxxxxxx> --- read-cache.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/read-cache.c b/read-cache.c index 893223e..ae33951 100644 --- a/read-cache.c +++ b/read-cache.c @@ -1591,14 +1591,24 @@ static void do_poke(struct strbuf *sb, int refresh_cache) PostMessage(hwnd, refresh_cache ? WM_USER : WM_USER + 1, 0, 0); } #else +static void do_nothing(int sig) +{ +} + static void do_poke(struct strbuf *sb, int refresh_cache) { - char *start = sb->buf; + int wait = sb->buf[0] == 'W'; + char *start = wait ? sb->buf + 1 : sb->buf; char *end = NULL; pid_t pid = strtoul(start, &end, 10); + int ret; if (!end || end != sb->buf + sb->len) return; - kill(pid, refresh_cache ? SIGHUP : SIGUSR1); + ret = kill(pid, refresh_cache ? SIGHUP : SIGUSR1); + if (!refresh_cache && !ret && wait) { + signal(SIGHUP, do_nothing); + sleep(1); + } } #endif -- 2.2.0.513.g477eb31 -- 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