agent: Fix the handling of socket takeover.

* agent/gpg-agent.c (handle_connections): Check the takeover when
interrupted.
(check_own_socket_thread): Kick the loop when detected.

--

GnuPG-bug-id: 6692
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
NIIBE Yutaka 2023-08-30 11:26:07 +09:00
parent 95186ae92f
commit b2826924ee
No known key found for this signature in database
GPG Key ID: 640114AF89DE6054
1 changed files with 11 additions and 9 deletions

View File

@ -3238,6 +3238,16 @@ handle_connections (gnupg_fd_t listen_fd,
gnupg_sleep (1);
continue;
}
if (socket_takeover_detected)
{
/* We may not remove the socket as it is now in use by another
server. */
inhibit_socket_removal = 1;
shutdown_pending = 2;
log_info ("this process is useless - shutting down\n");
}
if (ret <= 0)
/* Interrupt or timeout. Will be handled when calculating the
next timeout. */
@ -3274,15 +3284,6 @@ handle_connections (gnupg_fd_t listen_fd,
log_info ("homedir has been removed - shutting down\n");
}
if (socket_takeover_detected)
{
/* We may not remove the socket as it is now in use by another
server. */
inhibit_socket_removal = 1;
shutdown_pending = 2;
log_info ("this process is useless - shutting down\n");
}
if (!shutdown_pending)
{
int idx;
@ -3440,6 +3441,7 @@ check_own_socket_thread (void *arg)
xfree (sockname);
socket_takeover_detected = 1;
agent_kick_the_loop ();
return NULL;
}