diff options
author | NIIBE Yutaka <[email protected]> | 2024-09-18 04:44:53 +0000 |
---|---|---|
committer | NIIBE Yutaka <[email protected]> | 2024-09-18 04:44:53 +0000 |
commit | fc30f7059650da44e2c67c3db0e1468776380a0d (patch) | |
tree | b766911d56b914d485d775a47e6491baa1bb8f0e /scd | |
parent | tests:gpgscm: Raise an error correctly for process spawning. (diff) | |
download | gnupg-fc30f7059650da44e2c67c3db0e1468776380a0d.tar.gz gnupg-fc30f7059650da44e2c67c3db0e1468776380a0d.zip |
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 <[email protected]>
Diffstat (limited to 'scd')
-rw-r--r-- | scd/app.c | 9 |
1 files changed, 9 insertions, 0 deletions
@@ -25,6 +25,10 @@ #include <unistd.h> #include <npth.h> +#ifndef HAVE_W32_SYSTEM +#include <fcntl.h> /* 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 (); |