[git] GnuPG - branch, master, updated. gnupg-2.1.18-75-ge279281

by NIIBE Yutaka cvs at cvs.gnupg.org
Wed Feb 15 10:27:26 CET 2017


This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "The GNU Privacy Guard".

The branch, master has been updated
       via  e2792813a55e091c51be7b1b089a71beb6466f1d (commit)
      from  b456e5be91dc064fc9509ea86edab113721ed299 (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
commit e2792813a55e091c51be7b1b089a71beb6466f1d
Author: NIIBE Yutaka <gniibe at fsij.org>
Date:   Wed Feb 15 18:23:01 2017 +0900

    scd: Fix RESET command handling.
    
    * scd/app.c (release_application_internal): Remove.
    (release_application): Merge release_application_internal.
    (app_reset): Kick the loop and let close the reader.  Sleep is
    required here to wait closing.
    (scd_update_reader_status_file): When APP is no use, close it.
    
    Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>

diff --git a/scd/app.c b/scd/app.c
index 7e72870..29c9dad 100644
--- a/scd/app.c
+++ b/scd/app.c
@@ -136,40 +136,28 @@ check_application_conflict (const char *name, app_t app)
 }
 
 
-static void
-release_application_internal (app_t app)
-{
-  if (!app->ref_count)
-    log_bug ("trying to release an already released context\n");
-
-  --app->ref_count;
-}
-
 gpg_error_t
 app_reset (app_t app, ctrl_t ctrl, int send_reset)
 {
   gpg_error_t err;
 
-  err = lock_app (app, ctrl);
-  if (err)
-    return err;
-
   if (send_reset)
     {
       int sw = apdu_reset (app->slot);
       if (sw)
         err = gpg_error (GPG_ERR_CARD_RESET);
 
-      /* Release the same application which is used by other sessions.  */
+      /* Release the same application which is used by all sessions.  */
       send_client_notifications (app, 1);
+      scd_kick_the_loop ();
+      gnupg_sleep (1);
     }
   else
     {
       ctrl->app_ctx = NULL;
-      release_application_internal (app);
+      release_application (app);
     }
 
-  unlock_app (app);
   return err;
 }
 
@@ -486,7 +474,10 @@ release_application (app_t app)
      are preserved.  */
 
   lock_app (app, NULL);
-  release_application_internal (app);
+  if (!app->ref_count)
+    log_bug ("trying to release an already released context\n");
+
+  --app->ref_count;
   unlock_app (app);
 }
 
@@ -1028,20 +1019,25 @@ scd_update_reader_status_file (void)
       int sw;
       unsigned int status;
 
-      sw = apdu_get_status (a->slot, 0, &status);
       app_next = a->next;
 
-      if (sw == SW_HOST_NO_READER)
-        {
-          /* Most likely the _reader_ has been unplugged.  */
-          status = 0;
-        }
-      else if (sw)
+      if (a->ref_count == 0)
+        status = 0;
+      else
         {
-          /* Get status failed.  Ignore that.  */
-          if (a->periodical_check_needed)
-            periodical_check_needed = 1;
-          continue;
+          sw = apdu_get_status (a->slot, 0, &status);
+          if (sw == SW_HOST_NO_READER)
+            {
+              /* Most likely the _reader_ has been unplugged.  */
+              status = 0;
+            }
+          else if (sw)
+            {
+              /* Get status failed.  Ignore that.  */
+              if (a->periodical_check_needed)
+                periodical_check_needed = 1;
+              continue;
+            }
         }
 
       if (a->card_status != status)

-----------------------------------------------------------------------

Summary of changes:
 scd/app.c | 52 ++++++++++++++++++++++++----------------------------
 1 file changed, 24 insertions(+), 28 deletions(-)


hooks/post-receive
-- 
The GNU Privacy Guard
http://git.gnupg.org




More information about the Gnupg-commits mailing list