Re: git-credential-cache--daemon quits on SIGHUP, can we change it to ignore instead?
- From
Noam Postavsky <npostavs@users.sourceforge.net>
- Date
- Oct 21, 2015, 02:35 UTC
- Message-ID
- <CAM-tV-8VXtB5uRgqP9dFpww6AaLzasPV46tCiquz=nz=ksBNng@mail.gmail.com>
- In-Reply-To
- <xmqqfv18awj4.fsf@gitster.mtv.corp.google.com>
On Sun, Oct 18, 2015 at 1:58 PM, Junio C Hamano <gitster@pobox.com> wrote:
Show 7 quoted lines
> I cannot speak for the person who was primarily responsible for > designing this behaviour, but I happen to agree with the current > behaviour in the situation where it was designed to be used. Upon > the first use in your session, the "daemon" is auto-spawned, you can > keep talking with that same instance during your session, and you do > not have to do anything special to shut it down when you log out. > Isn't that what happens here?
After looking at this some more, I've discovered this is NOT what actually happens here. If I "git push" from a shell and then log out and log in again, another "git push" does NOT ask me for a password. In other words, the daemon is NOT shut down automatically when I log out. Given that, does it make sense to change the daemon to ignore SIGHUP, or is there some way to change it so that it does exit on logout?
---------------------
I don't understand why this happens, but the attached self-contained pair of programs demonstrate the behaviour:
If I do
make call-note-sighup note-sighup urxvt -e ./call-note-sighup ; cat note-sighup
sighup.log DOES contain "got sighup", but if I instead do
make call-note-sighup note-sighup ./call-note-sighup ; exit
afterwards sighup.log does NOT contain "got sighup" (and I must do "pkill note-sighup" to get rid of the lingering note-sighup process).
#include <stdio.h> #include <unistd.h>
int main(void) { remove("sighup.log"); int pid = fork();
if (pid < 0) {
perror("fork");
return 1;
} else if (pid == 0) {
execl("./note-sighup", "./note-sighup", NULL);
perror("execl(./note-sighup)");
return 1;
} else {
fprintf(stderr, "waiting for sigup.log to appear\n");
while (!access("sighup.log", F_OK)) {
}
fprintf(stderr, "okay, note-sighup.log has arrived, exiting in 5 seconds...\n");
sleep(5);
}return 0; }
#include <unistd.h> #include <stdio.h> #include <string.h> #include <signal.h>
static volatile int got_sighup = 0;
void sighup_handler(int sig) {
got_sighup = 1;
}int main(void) { struct sigaction act;
memset(&act, 0, sizeof act);
act.sa_handler = sighup_handler;
sigaction(SIGHUP, &act, NULL); FILE* out = fopen("sighup.log", "w");
setbuf(out, NULL);
fprintf(out, "starting note-sighup\n"); for (;;) {
sleep(1000);
if (got_sighup) {
got_sighup = 0;
fprintf(out, "got sighup\n");
}
}return 0; }