Skip to content

Commit 7d5e9c9

Browse files
peffgitster
authored andcommitted
credential-cache--daemon: clarify "exit" action semantics
When this code was originally written, there wasn't much thought given to the timing between a client asking for "exit", the daemon signaling that the action is done (with EOF), and the actual cleanup of the socket. However, we need to care about this so that our test scripts do not end up racy (e.g., by asking for an exit and checking that the socket was cleaned up). The code that is already there happens to behave very reasonably; let's add a comment to make it clear that any changes should retain the same behavior. Signed-off-by: Jeff King <[email protected]> Signed-off-by: Junio C Hamano <[email protected]>
1 parent 937978e commit 7d5e9c9

File tree

1 file changed

+10
-1
lines changed

1 file changed

+10
-1
lines changed

credential-cache--daemon.c

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,8 +126,17 @@ static void serve_one_client(FILE *in, FILE *out)
126126
fprintf(out, "password=%s\n", e->item.password);
127127
}
128128
}
129-
else if (!strcmp(action.buf, "exit"))
129+
else if (!strcmp(action.buf, "exit")) {
130+
/*
131+
* It's important that we clean up our socket first, and then
132+
* signal the client only once we have finished the cleanup.
133+
* Calling exit() directly does this, because we clean up in
134+
* our atexit() handler, and then signal the client when our
135+
* process actually ends, which closes the socket and gives
136+
* them EOF.
137+
*/
130138
exit(0);
139+
}
131140
else if (!strcmp(action.buf, "erase"))
132141
remove_credential(&c);
133142
else if (!strcmp(action.buf, "store")) {

0 commit comments

Comments
 (0)