Port Windows code to NPTH.

* agent/gpg-agent.c (get_agent_ssh_socket_name): Use
INVALID_HANDLE_VALUE instead of 0.
(handle_signal) [!HAVE_W32_SYSTEM]: Don't define.
(handle_connections): Port Windows code to NPTH.
* dirmngr/dirmngr.c (handle_connections): Port Windows code to NPTH.
* g13/g13.c (handle_connections): Port Windows code to NPTH.
* scd/scdaemon.c (handle_connections): Port Windows code to NPTH.
This commit is contained in:
Marcus Brinkmann 2012-01-19 22:27:44 +01:00 committed by Werner Koch
parent 7a7a597827
commit ccbb4c3652
4 changed files with 33 additions and 24 deletions

View File

@ -1391,9 +1391,9 @@ get_agent_ssh_socket_name (void)
void * void *
get_agent_scd_notify_event (void) get_agent_scd_notify_event (void)
{ {
static HANDLE the_event; static HANDLE the_event = INVALID_HANDLE_VALUE;
if (!the_event) if (the_event == INVALID_HANDLE_VALUE)
{ {
HANDLE h, h2; HANDLE h, h2;
SECURITY_ATTRIBUTES sa = { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE}; SECURITY_ATTRIBUTES sa = { sizeof (SECURITY_ATTRIBUTES), NULL, TRUE};
@ -1717,6 +1717,7 @@ agent_sigusr2_action (void)
} }
#ifndef HAVE_W32_SYSTEM
/* The signal handler for this program. It is expected to be run in /* The signal handler for this program. It is expected to be run in
its own trhead and not in the context of a signal handler. */ its own trhead and not in the context of a signal handler. */
static void static void
@ -1769,7 +1770,7 @@ handle_signal (int signo)
log_info ("signal %d received - no action defined\n", signo); log_info ("signal %d received - no action defined\n", signo);
} }
} }
#endif
/* Check the nonce on a new connection. This is a NOP unless we we /* Check the nonce on a new connection. This is a NOP unless we we
are using our Unix domain socket emulation under Windows. */ are using our Unix domain socket emulation under Windows. */
@ -1849,7 +1850,6 @@ static void
handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh) handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh)
{ {
npth_attr_t tattr; npth_attr_t tattr;
int signo;
struct sockaddr_un paddr; struct sockaddr_un paddr;
socklen_t plen; socklen_t plen;
fd_set fdset, read_fdset; fd_set fdset, read_fdset;
@ -1860,6 +1860,10 @@ handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh)
struct timespec abstime; struct timespec abstime;
struct timespec curtime; struct timespec curtime;
struct timespec timeout; struct timespec timeout;
#ifdef HAVE_W32_SYSTEM
HANDLE events[2];
int events_set;
#endif
ret = npth_attr_init(&tattr); ret = npth_attr_init(&tattr);
/* FIXME: Check error. */ /* FIXME: Check error. */
@ -1879,9 +1883,8 @@ handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh)
sigs = 0; sigs = 0;
ev = pth_event (PTH_EVENT_SIGS, &sigs, &signo); ev = pth_event (PTH_EVENT_SIGS, &sigs, &signo);
# else # else
sigs = 0; events[0] = get_agent_scd_notify_event ();
ev = pth_event (PTH_EVENT_HANDLE, get_agent_scd_notify_event ()); events[1] = INVALID_HANDLE_VALUE;
signo = 0;
# endif # endif
#endif #endif
@ -1929,16 +1932,19 @@ handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh)
} }
npth_timersub (&abstime, &curtime, &timeout); npth_timersub (&abstime, &curtime, &timeout);
#ifndef HAVE_W32_SYSTEM
ret = npth_pselect (nfd+1, &read_fdset, NULL, NULL, &timeout, npth_sigev_sigmask()); ret = npth_pselect (nfd+1, &read_fdset, NULL, NULL, &timeout, npth_sigev_sigmask());
saved_errno = errno; saved_errno = errno;
#ifndef HAVE_W32_SYSTEM
while (npth_sigev_get_pending(&signo)) while (npth_sigev_get_pending(&signo))
handle_signal (signo); handle_signal (signo);
#endif #else
events_set = 0;
ret = npth_eselect (nfd+1, &read_fdset, NULL, NULL, &timeout, events, &events_set);
saved_errno = errno;
#if defined(HAVE_W32_SYSTEM) && defined(PTH_EVENT_HANDLE) /* This is valid even if npth_eselect returns an error. */
if (pth_event_occurred (ev)) if (events_set & 1)
agent_sigusr2_action (); agent_sigusr2_action ();
#endif #endif
@ -2023,7 +2029,7 @@ handle_connections (gnupg_fd_t listen_fd, gnupg_fd_t listen_fd_ssh)
} }
else else
{ {
pthread_t thread; npth_t thread;
agent_init_default_ctrl (ctrl); agent_init_default_ctrl (ctrl);
ctrl->thread_startup.fd = fd; ctrl->thread_startup.fd = fd;

View File

@ -1749,9 +1749,6 @@ handle_connections (assuan_fd_t listen_fd)
npth_sigev_add (SIGINT); npth_sigev_add (SIGINT);
npth_sigev_add (SIGTERM); npth_sigev_add (SIGTERM);
npth_sigev_fini (); npth_sigev_fini ();
#else
/* Use a dummy event. */
sigs = 0;
#endif #endif
/* Setup the fdset. It has only one member. This is because we use /* Setup the fdset. It has only one member. This is because we use
@ -1791,12 +1788,15 @@ handle_connections (assuan_fd_t listen_fd)
} }
npth_timersub (&abstime, &curtime, &timeout); npth_timersub (&abstime, &curtime, &timeout);
#ifndef HAVE_W32_SYSTEM
ret = npth_pselect (nfd+1, &read_fdset, NULL, NULL, &timeout, npth_sigev_sigmask()); ret = npth_pselect (nfd+1, &read_fdset, NULL, NULL, &timeout, npth_sigev_sigmask());
saved_errno = errno; saved_errno = errno;
#ifndef HAVE_W32_SYSTEM
while (npth_sigev_get_pending(&signo)) while (npth_sigev_get_pending(&signo))
handle_signal (signo); handle_signal (signo);
#else
ret = npth_eselect (nfd+1, &read_fdset, NULL, NULL, &timeout, NULL, NULL);
saved_errno = errno;
#endif #endif
if (ret == -1 && saved_errno != EINTR) if (ret == -1 && saved_errno != EINTR)

View File

@ -854,8 +854,6 @@ idle_task (void *dummy_arg)
npth_sigev_add (SIGINT); npth_sigev_add (SIGINT);
npth_sigev_add (SIGTERM); npth_sigev_add (SIGTERM);
npth_sigev_fini (); npth_sigev_fini ();
#else
sigs = 0;
#endif #endif
npth_clock_gettime (&abstime); npth_clock_gettime (&abstime);
@ -882,12 +880,15 @@ idle_task (void *dummy_arg)
} }
npth_timersub (&abstime, &curtime, &timeout); npth_timersub (&abstime, &curtime, &timeout);
#ifndef HAVE_W32_SYSTEM
ret = npth_pselect (0, NULL, NULL, NULL, &timeout, npth_sigev_sigmask()); ret = npth_pselect (0, NULL, NULL, NULL, &timeout, npth_sigev_sigmask());
saved_errno = errno; saved_errno = errno;
#ifndef HAVE_W32_SYSTEM
while (npth_sigev_get_pending(&signo)) while (npth_sigev_get_pending(&signo))
handle_signal (signo); handle_signal (signo);
#else
ret = npth_eselect (0, NULL, NULL, NULL, &timeout, NULL, NULL);
saved_errno = errno;
#endif #endif
if (ret == -1 && saved_errno != EINTR) if (ret == -1 && saved_errno != EINTR)
@ -920,6 +921,7 @@ start_idle_task (void)
sigset_t sigs; /* The set of signals we want to catch. */ sigset_t sigs; /* The set of signals we want to catch. */
int err; int err;
#ifndef HAVE_W32_SYSTEM
/* These signals should always go to the idle task, so they need to /* These signals should always go to the idle task, so they need to
be blocked everywhere else. We assume start_idle_task is called be blocked everywhere else. We assume start_idle_task is called
from the main thread before any other threads are created. */ from the main thread before any other threads are created. */
@ -930,6 +932,7 @@ start_idle_task (void)
sigaddset (&sigs, SIGINT); sigaddset (&sigs, SIGINT);
sigaddset (&sigs, SIGTERM); sigaddset (&sigs, SIGTERM);
npth_sigmask (SIG_BLOCK, &sigs, NULL); npth_sigmask (SIG_BLOCK, &sigs, NULL);
#endif
npth_attr_init (&tattr); npth_attr_init (&tattr);
npth_attr_setdetachstate (&tattr, NPTH_CREATE_JOINABLE); npth_attr_setdetachstate (&tattr, NPTH_CREATE_JOINABLE);

View File

@ -1185,9 +1185,6 @@ handle_connections (int listen_fd)
npth_sigev_add (SIGINT); npth_sigev_add (SIGINT);
npth_sigev_add (SIGTERM); npth_sigev_add (SIGTERM);
npth_sigev_fini (); npth_sigev_fini ();
#else
sigs = 0;
ev = pth_event (PTH_EVENT_SIGS, &sigs, &signo);
#endif #endif
FD_ZERO (&fdset); FD_ZERO (&fdset);
@ -1234,17 +1231,20 @@ handle_connections (int listen_fd)
thus a simple assignment is fine to copy the entire set. */ thus a simple assignment is fine to copy the entire set. */
read_fdset = fdset; read_fdset = fdset;
#ifndef HAVE_W32_SYSTEM
ret = npth_pselect (nfd+1, &read_fdset, NULL, NULL, &timeout, npth_sigev_sigmask()); ret = npth_pselect (nfd+1, &read_fdset, NULL, NULL, &timeout, npth_sigev_sigmask());
saved_errno = errno; saved_errno = errno;
#ifndef HAVE_W32_SYSTEM
while (npth_sigev_get_pending(&signo)) while (npth_sigev_get_pending(&signo))
handle_signal (signo); handle_signal (signo);
#else
ret = npth_eselect (nfd+1, &read_fdset, NULL, NULL, &timeout, NULL, NULL);
saved_errno = errno;
#endif #endif
if (ret == -1 && saved_errno != EINTR) if (ret == -1 && saved_errno != EINTR)
{ {
log_error (_("pth_pselect failed: %s - waiting 1s\n"), log_error (_("npth_pselect failed: %s - waiting 1s\n"),
strerror (saved_errno)); strerror (saved_errno));
npth_sleep (1); npth_sleep (1);
continue; continue;