gc: notice gc processes run by other users

Since 64a99eb4 git gc refuses to run without the --force option if another gc process on the same repository is already running. However, if the repository is shared and user A runs git gc on the repository and while that gc is still running user B runs git gc on the same repository the gc process run by user A will not be noticed and the gc run by user B will go ahead and run. The problem is that the kill(pid, 0) test fails with an EPERM error since user B is not allowed to signal processes owned by user A (unless user B is root). Update the test to recognize an EPERM error as meaning the process exists and another gc should not be run (unless --force is given). Signed-off-by: Kyle J. McKay <mackyle@gmail.com> Signed-off-by: Junio C Hamano <gitster@pobox.com>

Kyle J. McKay committed Dec 31, 2013 at 04:07 UTC ed7eda8b38ec6230abf79986668ccb6e2e2c7494
1 file changed +1 -1
builtin/gc.c
+1 -1
@@ -222,7 +222,7 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid)
222 time(NULL) - st.st_mtime <= 12 * 3600 &&
223 fscanf(fp, "%"PRIuMAX" %127c", &pid, locking_host) == 2 &&
224 /* be gentle to concurrent "gc" on remote hosts */
225 - (strcmp(locking_host, my_host) || !kill(pid, 0));
225 + (strcmp(locking_host, my_host) || !kill(pid, 0) || errno == EPERM);
226 if (fp != NULL)
227 fclose(fp);
228 if (should_exit) {