assuan: Reorganize waiting for socket.

* common/asshelp.c (wait_for_sock): New function, collecting
codepaths from...
(start_new_gpg_agent) here and...
(start_new_dirmngr) here.
--

This has no functional change, but makes it easier to make this
function more efficient.

GnuPG-bug-id: 3490
Signed-off-by: Daniel Kahn Gillmor <dkg@fifthhorseman.net>
This commit is contained in:
Daniel Kahn Gillmor 2017-11-08 16:15:30 +01:00
parent 68284e1509
commit 0471ff9d3b
1 changed files with 30 additions and 42 deletions

View File

@ -307,6 +307,32 @@ unlock_spawning (lock_spawn_t *lock, const char *name)
} }
} }
static gpg_error_t
wait_for_sock (int secs, const char *name, const char *sockname, int verbose, assuan_context_t ctx, int *did_success_msg)
{
int i;
gpg_error_t err = 0;
for (i=0; i < secs; i++)
{
if (verbose)
log_info (_("waiting for the %s to come up ... (%ds)\n"),
name, secs - i);
gnupg_sleep (1);
err = assuan_socket_connect (ctx, sockname, 0, 0);
if (!err)
{
if (verbose)
{
log_info (_("connection to %s established\n"),
name);
*did_success_msg = 1;
}
break;
}
}
return err;
}
/* Try to connect to the agent via socket or start it if it is not /* Try to connect to the agent via socket or start it if it is not
running and AUTOSTART is set. Handle the server's initial running and AUTOSTART is set. Handle the server's initial
greeting. Returns a new assuan context at R_CTX or an error greeting. Returns a new assuan context at R_CTX or an error
@ -433,25 +459,8 @@ start_new_gpg_agent (assuan_context_t *r_ctx,
log_error ("failed to start agent '%s': %s\n", log_error ("failed to start agent '%s': %s\n",
agent_program, gpg_strerror (err)); agent_program, gpg_strerror (err));
else else
{ err = wait_for_sock (SECS_TO_WAIT_FOR_AGENT, "agent",
for (i=0; i < SECS_TO_WAIT_FOR_AGENT; i++) sockname, verbose, ctx, &did_success_msg);
{
if (verbose)
log_info (_("waiting for the agent to come up ... (%ds)\n"),
SECS_TO_WAIT_FOR_AGENT - i);
gnupg_sleep (1);
err = assuan_socket_connect (ctx, sockname, 0, 0);
if (!err)
{
if (verbose)
{
log_info (_("connection to agent established\n"));
did_success_msg = 1;
}
break;
}
}
}
} }
unlock_spawning (&lock, "agent"); unlock_spawning (&lock, "agent");
@ -584,29 +593,8 @@ start_new_dirmngr (assuan_context_t *r_ctx,
log_error ("failed to start the dirmngr '%s': %s\n", log_error ("failed to start the dirmngr '%s': %s\n",
dirmngr_program, gpg_strerror (err)); dirmngr_program, gpg_strerror (err));
else else
{ err = wait_for_sock (SECS_TO_WAIT_FOR_DIRMNGR, "dirmngr",
int i; sockname, verbose, ctx, &did_success_msg);
for (i=0; i < SECS_TO_WAIT_FOR_DIRMNGR; i++)
{
if (verbose)
log_info (_("waiting for the dirmngr "
"to come up ... (%ds)\n"),
SECS_TO_WAIT_FOR_DIRMNGR - i);
gnupg_sleep (1);
err = assuan_socket_connect (ctx, sockname, 0, 0);
if (!err)
{
if (verbose)
{
log_info (_("connection to the dirmngr"
" established\n"));
did_success_msg = 1;
}
break;
}
}
}
} }
unlock_spawning (&lock, "dirmngr"); unlock_spawning (&lock, "dirmngr");