aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNIIBE Yutaka <[email protected]>2020-07-17 02:11:45 +0000
committerNIIBE Yutaka <[email protected]>2020-07-17 02:11:45 +0000
commit46d185f60397f68830bfdfb99627b29aea5016f1 (patch)
tree32f13708595decc01534906d0d72df050976176d
parentgpg-card: Fix type of historyname. (diff)
downloadgnupg-46d185f60397f68830bfdfb99627b29aea5016f1.tar.gz
gnupg-46d185f60397f68830bfdfb99627b29aea5016f1.zip
scd: PC/SC: Don't release the context when it's in use.
* scd/apdu.c (close_pcsc_reader): Check if it's not in the loop. -- GnuPG-bug-id: 4998 Reported-by: Kevin Locke Signed-off-by: NIIBE Yutaka <[email protected]>
-rw-r--r--common/init.c11
-rw-r--r--dirmngr/dirmngr-client.c10
-rw-r--r--scd/apdu.c2
3 files changed, 1 insertions, 22 deletions
diff --git a/common/init.c b/common/init.c
index 073c5cd8a..dbdf40527 100644
--- a/common/init.c
+++ b/common/init.c
@@ -161,17 +161,6 @@ _init_common_subsystems (gpg_err_source_t errsource, int *argcp, char ***argvp)
/* Try to auto set the character set. */
set_native_charset (NULL);
-#ifdef HAVE_W32_SYSTEM
- /* For W32 we need to initialize the socket layer. This is because
- we use recv and send in libassuan as well as at some other
- places. */
- {
- WSADATA wsadat;
-
- WSAStartup (0x202, &wsadat);
- }
-#endif
-
#ifdef HAVE_W32CE_SYSTEM
/* Register the sleep exit function before the estream init so that
the sleep will be called after the estream registered atexit
diff --git a/dirmngr/dirmngr-client.c b/dirmngr/dirmngr-client.c
index 1ea10a8ad..f65a7fcfa 100644
--- a/dirmngr/dirmngr-client.c
+++ b/dirmngr/dirmngr-client.c
@@ -208,16 +208,6 @@ main (int argc, char **argv )
* init_common_subsystems, but we don't need that here. */
gpgrt_set_fixed_string_mapper (map_static_macro_string);
- /* For W32 we need to initialize the socket subsystem. Because we
- don't use Pth we need to do this explicit. */
-#ifdef HAVE_W32_SYSTEM
- {
- WSADATA wsadat;
-
- WSAStartup (0x202, &wsadat);
- }
-#endif /*HAVE_W32_SYSTEM*/
-
/* Init Assuan. */
assuan_set_assuan_log_prefix (log_get_prefix (NULL));
assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
diff --git a/scd/apdu.c b/scd/apdu.c
index 46d18b14b..33951a2da 100644
--- a/scd/apdu.c
+++ b/scd/apdu.c
@@ -813,7 +813,7 @@ static int
close_pcsc_reader (int slot)
{
(void)slot;
- if (--pcsc.count == 0)
+ if (--pcsc.count == 0 && npth_mutex_trylock (&reader_table_lock) == 0)
{
int i;