From 4491058772cde01cc4f98729843d2674174b7c4e Mon Sep 17 00:00:00 2001 From: Werner Koch Date: Fri, 14 Mar 2025 14:04:36 +0100 Subject: [PATCH] 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 (cherry picked from commit a7ec3792c5d1891180265c946bc021cd8a205e54) --- scd/scdaemon.c | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/scd/scdaemon.c b/scd/scdaemon.c index b62f5b619..db82acb33 100644 --- a/scd/scdaemon.c +++ b/scd/scdaemon.c @@ -1371,8 +1371,11 @@ handle_connections (int 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)