mirror of
git://git.gnupg.org/gnupg.git
synced 2025-04-17 15:44:34 +02:00
npth_sigwait is not available.
Signed-off-by: NIIBE Yutaka <gniibe@fsij.org>
This commit is contained in:
parent
20a5cc93b5
commit
beb14b8026
140
scd/command.c
140
scd/command.c
@ -2158,7 +2158,7 @@ cmd_list_device (assuan_context_t ctx, char *line)
|
|||||||
int watch = 0;
|
int watch = 0;
|
||||||
|
|
||||||
if (has_option (line, "--watch"))
|
if (has_option (line, "--watch"))
|
||||||
watch = 0;
|
watch = 1;
|
||||||
|
|
||||||
if ((err = open_card (ctrl)))
|
if ((err = open_card (ctrl)))
|
||||||
return err;
|
return err;
|
||||||
@ -2168,14 +2168,14 @@ cmd_list_device (assuan_context_t ctx, char *line)
|
|||||||
ctrl->server_local->watching_status = 1;
|
ctrl->server_local->watching_status = 1;
|
||||||
while (1)
|
while (1)
|
||||||
{
|
{
|
||||||
sigset_t sigmask;
|
|
||||||
int sig;
|
int sig;
|
||||||
|
|
||||||
/* FIXME: sigwait OK?, what about Windows? */
|
npth_unprotect ();
|
||||||
sigemptyset (&sigmask);
|
sigwait (npth_sigev_sigmask (), &sig);
|
||||||
sigaddset (&sigmask, SIGCONT);
|
npth_protect ();
|
||||||
npth_sigwait (&sigmask, &sig);
|
|
||||||
/**/
|
assuan_write_status (ctx, "signal", "");
|
||||||
|
|
||||||
if (ctrl->server_local->card_removed)
|
if (ctrl->server_local->card_removed)
|
||||||
{
|
{
|
||||||
ctrl->server_local->watching_status = 0;
|
ctrl->server_local->watching_status = 0;
|
||||||
@ -2733,79 +2733,81 @@ send_client_notifications (card_t card, int removal)
|
|||||||
struct server_local_s *sl;
|
struct server_local_s *sl;
|
||||||
|
|
||||||
for (sl=session_list; sl; sl = sl->next_session)
|
for (sl=session_list; sl; sl = sl->next_session)
|
||||||
if (sl->ctrl_backlink && sl->ctrl_backlink->card_ctx == card)
|
{
|
||||||
{
|
if (sl->watching_status)
|
||||||
pid_t pid;
|
assuan_write_status (sl->assuan_ctx, "FIXME: change", "something");
|
||||||
|
|
||||||
|
if (sl->ctrl_backlink && sl->ctrl_backlink->card_ctx == card)
|
||||||
|
{
|
||||||
|
pid_t pid;
|
||||||
#ifdef HAVE_W32_SYSTEM
|
#ifdef HAVE_W32_SYSTEM
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
#else
|
#else
|
||||||
int signo;
|
int signo;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (removal)
|
if (removal)
|
||||||
{
|
{
|
||||||
sl->ctrl_backlink->card_ctx = NULL;
|
sl->ctrl_backlink->card_ctx = NULL;
|
||||||
sl->ctrl_backlink->current_apptype = APPTYPE_NONE;
|
sl->ctrl_backlink->current_apptype = APPTYPE_NONE;
|
||||||
sl->card_removed = 1;
|
sl->card_removed = 1;
|
||||||
card_unref_locked (card);
|
card_unref_locked (card);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (sl->watching_status)
|
if (!sl->event_signal || !sl->assuan_ctx)
|
||||||
assuan_write_status (sl->assuan_ctx, "FIXME: change", "something");
|
continue;
|
||||||
|
|
||||||
if (!sl->event_signal || !sl->assuan_ctx)
|
pid = assuan_get_pid (sl->assuan_ctx);
|
||||||
continue;
|
|
||||||
|
|
||||||
pid = assuan_get_pid (sl->assuan_ctx);
|
|
||||||
|
|
||||||
#ifdef HAVE_W32_SYSTEM
|
#ifdef HAVE_W32_SYSTEM
|
||||||
handle = sl->event_signal;
|
handle = sl->event_signal;
|
||||||
for (kidx=0; kidx < killidx; kidx++)
|
for (kidx=0; kidx < killidx; kidx++)
|
||||||
if (killed[kidx].pid == pid
|
if (killed[kidx].pid == pid
|
||||||
&& killed[kidx].handle == handle)
|
&& killed[kidx].handle == handle)
|
||||||
break;
|
break;
|
||||||
if (kidx < killidx)
|
if (kidx < killidx)
|
||||||
log_info ("event %p (%p) already triggered for client %d\n",
|
log_info ("event %p (%p) already triggered for client %d\n",
|
||||||
sl->event_signal, handle, (int)pid);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log_info ("triggering event %p (%p) for client %d\n",
|
|
||||||
sl->event_signal, handle, (int)pid);
|
sl->event_signal, handle, (int)pid);
|
||||||
if (!SetEvent (handle))
|
else
|
||||||
log_error ("SetEvent(%p) failed: %s\n",
|
{
|
||||||
sl->event_signal, w32_strerror (-1));
|
log_info ("triggering event %p (%p) for client %d\n",
|
||||||
if (killidx < DIM (killed))
|
sl->event_signal, handle, (int)pid);
|
||||||
{
|
if (!SetEvent (handle))
|
||||||
killed[killidx].pid = pid;
|
log_error ("SetEvent(%p) failed: %s\n",
|
||||||
killed[killidx].handle = handle;
|
sl->event_signal, w32_strerror (-1));
|
||||||
killidx++;
|
if (killidx < DIM (killed))
|
||||||
}
|
{
|
||||||
}
|
killed[killidx].pid = pid;
|
||||||
|
killed[killidx].handle = handle;
|
||||||
|
killidx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
#else /*!HAVE_W32_SYSTEM*/
|
#else /*!HAVE_W32_SYSTEM*/
|
||||||
signo = sl->event_signal;
|
signo = sl->event_signal;
|
||||||
|
|
||||||
if (pid != (pid_t)(-1) && pid && signo > 0)
|
if (pid != (pid_t)(-1) && pid && signo > 0)
|
||||||
{
|
{
|
||||||
for (kidx=0; kidx < killidx; kidx++)
|
for (kidx=0; kidx < killidx; kidx++)
|
||||||
if (killed[kidx].pid == pid
|
if (killed[kidx].pid == pid
|
||||||
&& killed[kidx].signo == signo)
|
&& killed[kidx].signo == signo)
|
||||||
break;
|
break;
|
||||||
if (kidx < killidx)
|
if (kidx < killidx)
|
||||||
log_info ("signal %d already sent to client %d\n",
|
log_info ("signal %d already sent to client %d\n",
|
||||||
signo, (int)pid);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
log_info ("sending signal %d to client %d\n",
|
|
||||||
signo, (int)pid);
|
signo, (int)pid);
|
||||||
kill (pid, signo);
|
else
|
||||||
if (killidx < DIM (killed))
|
{
|
||||||
{
|
log_info ("sending signal %d to client %d\n",
|
||||||
killed[killidx].pid = pid;
|
signo, (int)pid);
|
||||||
killed[killidx].signo = signo;
|
kill (pid, signo);
|
||||||
killidx++;
|
if (killidx < DIM (killed))
|
||||||
}
|
{
|
||||||
}
|
killed[killidx].pid = pid;
|
||||||
}
|
killed[killidx].signo = signo;
|
||||||
|
killidx++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
#endif /*!HAVE_W32_SYSTEM*/
|
#endif /*!HAVE_W32_SYSTEM*/
|
||||||
}
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user