On Wed, Oct 16, 2024 at 04:21:36PM +0200, Patrick Steinhardt wrote: > diff --git a/builtin/credential-cache--daemon.c b/builtin/credential-cache--daemon.c > index bc22f5c6d24..5a09df5c167 100644 > --- a/builtin/credential-cache--daemon.c > +++ b/builtin/credential-cache--daemon.c > @@ -156,13 +156,11 @@ static void serve_one_client(FILE *in, FILE *out) > } > else if (!strcmp(action.buf, "exit")) { > /* > - * It's important that we clean up our socket first, and then > - * signal the client only once we have finished the cleanup. > - * Calling exit() directly does this, because we clean up in > - * our atexit() handler, and then signal the client when our > - * process actually ends, which closes the socket and gives > - * them EOF. > + * We must close our file handles before we exit such that the > + * client will receive an EOF. > */ > + fclose(in); > + fclose(out); > exit(0); > } This breaks the thing the comment was trying to protect against. We want to unlink() the socket file before closing the descriptors.