mirror of
git://git.gnupg.org/gnupg.git
synced 2024-11-10 21:38:50 +01:00
scd: Fix how scdaemon pipe server finishes.
* scd/scdaemon.h (scd_command_handler): Fix the return type.
* scd/command.c (scd_command_handler): Not return a value.
* scd/scdaemon.c (pipe_server): Make it auto variable in main.
(main): Use auto PIPE_SERVER variable.
(start_connection_thread): When it's a pipe connection and it
finishes, let the service shutdown.
--
GnuPG-bug-id: 7151
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
(cherry picked from commit 01fa318be0
)
This commit is contained in:
parent
76066d71f4
commit
70bb9c5127
@ -2472,9 +2472,8 @@ register_commands (assuan_context_t ctx)
|
||||
|
||||
|
||||
/* Startup the server. If FD is given as -1 this is simple pipe
|
||||
server, otherwise it is a regular server. Returns true if there
|
||||
are no more active asessions. */
|
||||
int
|
||||
server, otherwise it is a regular server. */
|
||||
void
|
||||
scd_command_handler (ctrl_t ctrl, gnupg_fd_t fd)
|
||||
{
|
||||
int rc;
|
||||
@ -2573,9 +2572,6 @@ scd_command_handler (ctrl_t ctrl, gnupg_fd_t fd)
|
||||
|
||||
if (stopme)
|
||||
scd_exit (0);
|
||||
|
||||
/* If there are no more sessions return true. */
|
||||
return !session_list;
|
||||
}
|
||||
|
||||
|
||||
|
@ -249,9 +249,6 @@ static int shutdown_pending;
|
||||
/* It is possible that we are currently running under setuid permissions */
|
||||
static int maybe_setuid = 1;
|
||||
|
||||
/* Flag telling whether we are running as a pipe server. */
|
||||
static int pipe_server;
|
||||
|
||||
/* Name of the communication socket */
|
||||
static char *socket_name;
|
||||
/* Name of the redirected socket or NULL. */
|
||||
@ -460,6 +457,7 @@ main (int argc, char **argv )
|
||||
int greeting = 0;
|
||||
int nogreeting = 0;
|
||||
int multi_server = 0;
|
||||
int pipe_server = 0;
|
||||
int is_daemon = 0;
|
||||
int nodetach = 0;
|
||||
int csh_style = 0;
|
||||
@ -470,7 +468,6 @@ main (int argc, char **argv )
|
||||
int allow_coredump = 0;
|
||||
struct assuan_malloc_hooks malloc_hooks;
|
||||
int res;
|
||||
npth_t pipecon_handler;
|
||||
const char *application_priority = NULL;
|
||||
|
||||
early_system_init ();
|
||||
@ -767,6 +764,7 @@ main (int argc, char **argv )
|
||||
ctrl_t ctrl;
|
||||
npth_attr_t tattr;
|
||||
gnupg_fd_t fd = GNUPG_INVALID_FD;
|
||||
npth_t pipecon_handler;
|
||||
|
||||
#ifndef HAVE_W32_SYSTEM
|
||||
{
|
||||
@ -1220,12 +1218,11 @@ start_connection_thread (void *arg)
|
||||
log_info (_("handler for fd %d started\n"),
|
||||
FD2INT(ctrl->thread_startup.fd));
|
||||
|
||||
/* If this is a pipe server, we request a shutdown if the command
|
||||
handler asked for it. With the next ticker event and given that
|
||||
/* If this thread is the pipe connection thread, flag that a
|
||||
shutdown is required. With the next ticker event and given that
|
||||
no other connections are running the shutdown will then
|
||||
happen. */
|
||||
if (scd_command_handler (ctrl, ctrl->thread_startup.fd)
|
||||
&& pipe_server)
|
||||
if (ctrl->thread_startup.fd == GNUPG_INVALID_FD)
|
||||
shutdown_pending = 1;
|
||||
|
||||
if (opt.verbose)
|
||||
|
@ -141,7 +141,7 @@ const char *scd_get_socket_name (void);
|
||||
|
||||
/*-- command.c --*/
|
||||
gpg_error_t initialize_module_command (void);
|
||||
int scd_command_handler (ctrl_t, gnupg_fd_t);
|
||||
void scd_command_handler (ctrl_t, gnupg_fd_t);
|
||||
void send_status_info (ctrl_t ctrl, const char *keyword, ...)
|
||||
GPGRT_ATTR_SENTINEL(1);
|
||||
gpg_error_t send_status_direct (ctrl_t ctrl,
|
||||
|
Loading…
Reference in New Issue
Block a user