mirror of
https://github.com/git/git
synced 2024-08-27 11:39:22 +00:00
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>
This commit is contained in:
parent
d2446dfd7f
commit
ed7eda8b38
|
@ -222,7 +222,7 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid)
|
||||||
time(NULL) - st.st_mtime <= 12 * 3600 &&
|
time(NULL) - st.st_mtime <= 12 * 3600 &&
|
||||||
fscanf(fp, "%"PRIuMAX" %127c", &pid, locking_host) == 2 &&
|
fscanf(fp, "%"PRIuMAX" %127c", &pid, locking_host) == 2 &&
|
||||||
/* be gentle to concurrent "gc" on remote hosts */
|
/* be gentle to concurrent "gc" on remote hosts */
|
||||||
(strcmp(locking_host, my_host) || !kill(pid, 0));
|
(strcmp(locking_host, my_host) || !kill(pid, 0) || errno == EPERM);
|
||||||
if (fp != NULL)
|
if (fp != NULL)
|
||||||
fclose(fp);
|
fclose(fp);
|
||||||
if (should_exit) {
|
if (should_exit) {
|
||||||
|
|
Loading…
Reference in a new issue