From a7ec3792c5d1891180265c946bc021cd8a205e54 Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 14 Mar 2025 14:04:36 +0100 Subject: scd,w32: Fix posssible lockup due to lost select results. * scd/scdaemon.c (handle_connections) [W32]: Do not continue the loop when an event was encountered. -- Here the event handle is passed to npth_eselect so that this function can detect the event and reset the event. There is no need to consume this information here. However, npth_select might also got a ready file descriptor along with the event and by doing a "continue" we would miss the ready state of the file descriptor. The fix is to do nothing here, similar to what we do in gpg-agent. Fixes-commit: f9acc7d18bb90f47dafe7e32ae92f567756d6b12 GnuPG-bug-id: 2982 --- scd/scdaemon.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'scd/scdaemon.c') diff --git a/scd/scdaemon.c b/scd/scdaemon.c index e7ffc33c9..48a7def74 100644 --- a/scd/scdaemon.c +++ b/scd/scdaemon.c @@ -1394,8 +1394,11 @@ handle_connections (gnupg_fd_t listen_fd) ret = npth_eselect (nfd+1, &read_fdset, NULL, NULL, t, events, &events_set); saved_errno = errno; - if (events_set & 1) - continue; + if ((events_set & 1)) + { + if (opt.debug) + log_debug ("the_event seen and reset by npth_eselect\n"); + } #endif if (ret == -1 && saved_errno != EINTR) -- cgit v1.2.3