From 1565baa93ae39a81c5b00ca4558cd24838b4ce54 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Fri, 20 Aug 2021 15:22:28 +0900 Subject: [PATCH] scd: Don't release the context until list_finish for PC/SC. * scd/apdu.c (apdu_dev_list_start): Increment PCSC.COUNT here. (apdu_dev_list_finish): Decrement PCSC.COUNT. -- GnuPG-bug-id: 5416 Fixes-commit: 32baa9acfb153004bdb2509f9516482b78f256a4 Signed-off-by: NIIBE Yutaka --- scd/apdu.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/scd/apdu.c b/scd/apdu.c index 8896508df..04bd3e2f3 100644 --- a/scd/apdu.c +++ b/scd/apdu.c @@ -2087,6 +2087,13 @@ apdu_dev_list_start (const char *portstr, struct dev_list **l_p) break; } } + + /* + * Increment PCSC.COUNT artificially, so that PCSC.CONTEXT can + * be kept (not released) until apdu_dev_list_finish will be + * called. + */ + pcsc.count++; } *l_p = dl; @@ -2112,7 +2119,7 @@ apdu_dev_list_finish (struct dev_list *dl) pcsc.rdrname[i] = NULL; npth_mutex_lock (&reader_table_lock); - if (pcsc.count == 0) + if (--pcsc.count == 0) release_pcsc_context (); npth_mutex_unlock (&reader_table_lock); }