Re: [PATCH] gc: notice gc processes run by other users

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Dec 31, 2013 at 7:07 PM, Kyle J. McKay <mackyle@xxxxxxxxx> wrote:
> 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).

Ack. Looking at kill(2) the other errors are EINVAL and ESRCH, which
are fine to ignore.

> ---
>
> I suggest this be included in maint as others may also have expected the
> shared repository, different user gc scenario to be caught by the new
> code when in fact it's not without this patch.
>
>  builtin/gc.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/builtin/gc.c b/builtin/gc.c
> index c14190f8..25f2237c 100644
> --- a/builtin/gc.c
> +++ b/builtin/gc.c
> @@ -222,7 +222,7 @@ static const char *lock_repo_for_gc(int force, pid_t* ret_pid)
>                         time(NULL) - st.st_mtime <= 12 * 3600 &&
>                         fscanf(fp, "%"PRIuMAX" %127c", &pid, locking_host) == 2 &&
>                         /* 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)
>                         fclose(fp);
>                 if (should_exit) {
> --
> 1.8.5.2
>



-- 
Duy
--
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




[Index of Archives]     [Linux Kernel Development]     [Gcc Help]     [IETF Annouce]     [DCCP]     [Netdev]     [Networking]     [Security]     [V4L]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux SCSI]     [Fedora Users]