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 <pclo...@gmail.com>
---
 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 majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to