From fc30f7059650da44e2c67c3db0e1468776380a0d Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Wed, 18 Sep 2024 13:44:53 +0900 Subject: [PATCH] scd: Fix DEVINFO to allow multiple clients. * scd/app.c (initialize_module_command): Use O_NONBLOCK for pipe. -- GnuPG-bug-id: 7151 Signed-off-by: NIIBE Yutaka --- scd/app.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/scd/app.c b/scd/app.c index 525950e99..18c0b4eb8 100644 --- a/scd/app.c +++ b/scd/app.c @@ -25,6 +25,10 @@ #include #include +#ifndef HAVE_W32_SYSTEM +#include /* F_SETFD F_GETFL F_SETFL O_NONBLOCK fcntl(2) */ +#endif + #include "scdaemon.h" #include "../common/exechelp.h" #include "iso7816.h" @@ -2654,6 +2658,11 @@ initialize_module_command (void) log_error ("pipe creation failed: %s\n", gpg_strerror (ret)); return err; } + /* There may be multiple clients for DEVINFO --watch. + * O_NONBLOCK allows multiple accesses, not blocking at read(2). */ + if (fcntl (card_list_lock.notify_pipe[0], F_SETFL, O_NONBLOCK) < 0) + log_error ("fcntl failed: %s\n", + gpg_strerror (gpg_error_from_syserror ())); #endif return apdu_init ();