mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
scd: Fix regression tracking the connection count.
* scd/scdaemon.c (get_active_connection_count): New.
(start_connection_thread): Bump ACTIVE_CONNECTIONS up and down.
* scd/command.c (cmd_getinfo): Add subcommand "connections".
--
Apply gpg-agent change to scdaemon. See the commit in 2016-08-06:
40d16029ed
Then, add kicking the loop, so that main loop can notice the change of
the connection.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
2e78aa6ff7
commit
8ddc9268f6
3 changed files with 41 additions and 24 deletions
|
@ -1374,26 +1374,22 @@ static const char hlp_getinfo[] =
|
||||||
"\n"
|
"\n"
|
||||||
" version - Return the version of the program.\n"
|
" version - Return the version of the program.\n"
|
||||||
" pid - Return the process id of the server.\n"
|
" pid - Return the process id of the server.\n"
|
||||||
"\n"
|
|
||||||
" socket_name - Return the name of the socket.\n"
|
" socket_name - Return the name of the socket.\n"
|
||||||
"\n"
|
" connections - Return number of active connections.\n"
|
||||||
"status - Return the status of the current reader (in the future, may\n"
|
" status - Return the status of the current reader (in the future,\n"
|
||||||
"also return the status of all readers). The status is a list of\n"
|
" may also return the status of all readers). The status\n"
|
||||||
"one-character flags. The following flags are currently defined:\n"
|
" is a list of one-character flags. The following flags\n"
|
||||||
" 'u' Usable card present. This is the normal state during operation.\n"
|
" are currently defined:\n"
|
||||||
|
" 'u' Usable card present.\n"
|
||||||
" 'r' Card removed. A reset is necessary.\n"
|
" 'r' Card removed. A reset is necessary.\n"
|
||||||
" These flags are exclusive.\n"
|
" These flags are exclusive.\n"
|
||||||
"\n"
|
|
||||||
" reader_list - Return a list of detected card readers. Does\n"
|
" reader_list - Return a list of detected card readers. Does\n"
|
||||||
" currently only work with the internal CCID driver.\n"
|
" currently only work with the internal CCID driver.\n"
|
||||||
"\n"
|
|
||||||
" deny_admin - Returns OK if admin commands are not allowed or\n"
|
" deny_admin - Returns OK if admin commands are not allowed or\n"
|
||||||
" GPG_ERR_GENERAL if admin commands are allowed.\n"
|
" GPG_ERR_GENERAL if admin commands are allowed.\n"
|
||||||
"\n"
|
|
||||||
" app_list - Return a list of supported applications. One\n"
|
" app_list - Return a list of supported applications. One\n"
|
||||||
" application per line, fields delimited by colons,\n"
|
" application per line, fields delimited by colons,\n"
|
||||||
" first field is the name.\n"
|
" first field is the name.\n"
|
||||||
"\n"
|
|
||||||
" card_list - Return a list of serial numbers of active cards,\n"
|
" card_list - Return a list of serial numbers of active cards,\n"
|
||||||
" using a status response.";
|
" using a status response.";
|
||||||
static gpg_error_t
|
static gpg_error_t
|
||||||
|
@ -1422,6 +1418,13 @@ cmd_getinfo (assuan_context_t ctx, char *line)
|
||||||
else
|
else
|
||||||
rc = gpg_error (GPG_ERR_NO_DATA);
|
rc = gpg_error (GPG_ERR_NO_DATA);
|
||||||
}
|
}
|
||||||
|
else if (!strcmp (line, "connections"))
|
||||||
|
{
|
||||||
|
char numbuf[20];
|
||||||
|
|
||||||
|
snprintf (numbuf, sizeof numbuf, "%d", get_active_connection_count ());
|
||||||
|
rc = assuan_send_data (ctx, numbuf, strlen (numbuf));
|
||||||
|
}
|
||||||
else if (!strcmp (line, "status"))
|
else if (!strcmp (line, "status"))
|
||||||
{
|
{
|
||||||
ctrl_t ctrl = assuan_get_pointer (ctx);
|
ctrl_t ctrl = assuan_get_pointer (ctx);
|
||||||
|
|
|
@ -1150,6 +1150,8 @@ start_connection_thread (void *arg)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
active_connections++;
|
||||||
|
|
||||||
scd_init_default_ctrl (ctrl);
|
scd_init_default_ctrl (ctrl);
|
||||||
if (opt.verbose)
|
if (opt.verbose)
|
||||||
log_info (_("handler for fd %d started\n"),
|
log_info (_("handler for fd %d started\n"),
|
||||||
|
@ -1169,6 +1171,10 @@ start_connection_thread (void *arg)
|
||||||
|
|
||||||
scd_deinit_default_ctrl (ctrl);
|
scd_deinit_default_ctrl (ctrl);
|
||||||
xfree (ctrl);
|
xfree (ctrl);
|
||||||
|
|
||||||
|
if (--active_connections == 0)
|
||||||
|
scd_kick_the_loop ();
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1349,3 +1355,10 @@ handle_connections (int listen_fd)
|
||||||
log_info (_("%s %s stopped\n"), strusage(11), strusage(13));
|
log_info (_("%s %s stopped\n"), strusage(11), strusage(13));
|
||||||
npth_attr_destroy (&tattr);
|
npth_attr_destroy (&tattr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Return the number of active connections. */
|
||||||
|
int
|
||||||
|
get_active_connection_count (void)
|
||||||
|
{
|
||||||
|
return active_connections;
|
||||||
|
}
|
||||||
|
|
|
@ -125,6 +125,7 @@ void send_status_info (ctrl_t ctrl, const char *keyword, ...)
|
||||||
void send_status_direct (ctrl_t ctrl, const char *keyword, const char *args);
|
void send_status_direct (ctrl_t ctrl, const char *keyword, const char *args);
|
||||||
void send_client_notifications (app_t app, int removal);
|
void send_client_notifications (app_t app, int removal);
|
||||||
void scd_kick_the_loop (void);
|
void scd_kick_the_loop (void);
|
||||||
|
int get_active_connection_count (void);
|
||||||
|
|
||||||
/*-- app.c --*/
|
/*-- app.c --*/
|
||||||
int scd_update_reader_status_file (void);
|
int scd_update_reader_status_file (void);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue