diff options
author | Werner Koch <[email protected]> | 2025-03-14 13:04:36 +0000 |
---|---|---|
committer | Werner Koch <[email protected]> | 2025-03-14 13:04:36 +0000 |
commit | a7ec3792c5d1891180265c946bc021cd8a205e54 (patch) | |
tree | c155f74d084e55ba9da93455fb3d7a4608a91fe9 | |
parent | doc: Minor updates (diff) | |
download | gnupg-a7ec3792c5d1891180265c946bc021cd8a205e54.tar.gz gnupg-a7ec3792c5d1891180265c946bc021cd8a205e54.zip |
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
-rw-r--r-- | scd/scdaemon.c | 7 |
1 files changed, 5 insertions, 2 deletions
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) |