[git] GnuPG - branch, STABLE-BRANCH-2-2, updated. gnupg-2.2.9-12-g38eb7c3

by Werner Koch cvs at cvs.gnupg.org
Tue Aug 28 17:02:32 CEST 2018


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, STABLE-BRANCH-2-2 has been updated
       via  38eb7c360bc4867cbaf37e3c2c0865bc6452ba4a (commit)
       via  1189df2cd7d4b6896ba22aa204c159ff2a425ead (commit)
       via  a22a55b994e06dd06157fbdabf5a402d8daf69c2 (commit)
      from  0709f358cd13abc82e0f97f055fcaa712f0fd44f (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 38eb7c360bc4867cbaf37e3c2c0865bc6452ba4a
Author: Werner Koch <wk at gnupg.org>
Date:   Wed Nov 15 15:30:21 2017 +0100

    assuan: Fix exponential decay for first second.
    
    * common/asshelp.c (wait_for_sock): Round SECSLEFT.
    * dirmngr/dirmngr.c (main): Take care of --debug-wait also in dameon
    mode.
    * common/sysutils.c (gnupg_usleep) [HAVE_NANOSLEEP]: Fix nanosleep use.
    --
    
    Without the rounding we saw in verbose mose
    
     [...]to come up ... (5s)
     [...]to come up ... (4s)
    
    immediately without the expected one second delay.  Waiting for the
    next seconds did not work if nanosleep was used due to improper passed
    parameters in gnupg_usleep.
    
    Adding --debug-wait for dirmngr in daemon mode is required to test
    this change.
    
    GnuPG-bug-id: 3490
    Signed-off-by: Werner Koch <wk at gnupg.org>
    (cherry picked from commit 0cfdd3b57d592fb6baa7dafe8fde124e8a6c7798)
    Fixes-commit: 1189df2cd7d4b6896ba22aa204c159ff2a425ead
    Signed-off-by: Werner Koch <wk at gnupg.org>

diff --git a/common/asshelp.c b/common/asshelp.c
index 76f812d..d87017e 100644
--- a/common/asshelp.c
+++ b/common/asshelp.c
@@ -326,7 +326,10 @@ wait_for_sock (int secs, const char *name, const char *sockname, int verbose, as
     {
       if (verbose)
         {
-          secsleft = (target_us - elapsed_us)/1000000;
+          secsleft = (target_us - elapsed_us + 999999)/1000000;
+          /* log_clock ("left=%d last=%d targ=%d elap=%d next=%d\n", */
+          /*            secsleft, lastalert, target_us, elapsed_us, */
+          /*            next_sleep_us); */
           if (secsleft < lastalert)
             {
               log_info (_("waiting for the %s to come up ... (%ds)\n"),
diff --git a/common/sysutils.c b/common/sysutils.c
index e90010c..55a7ee9 100644
--- a/common/sysutils.c
+++ b/common/sysutils.c
@@ -340,11 +340,10 @@ gnupg_usleep (unsigned int usecs)
       struct timespec req;
       struct timespec rem;
 
-      req.tv_sec = 0;
-      req.tv_nsec = usecs * 1000;
-
+      req.tv_sec  = usecs / 1000000;
+      req.tv_nsec = (usecs % 1000000) * 1000;
       while (nanosleep (&req, &rem) < 0 && errno == EINTR)
-        req = rem;
+          req = rem;
     }
 
 #else /*Standard Unix*/
diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c
index 31f8e0f..5965f84 100644
--- a/dirmngr/dirmngr.c
+++ b/dirmngr/dirmngr.c
@@ -1203,6 +1203,14 @@ main (int argc, char **argv)
           current_logfile = xstrdup (logfile);
         }
 
+      if (debug_wait)
+        {
+          log_debug ("waiting for debugger - my pid is %u .....\n",
+                     (unsigned int)getpid());
+          gnupg_sleep (debug_wait);
+          log_debug ("... okay\n");
+        }
+
 #ifndef HAVE_W32_SYSTEM
       if (strchr (socket_name, ':'))
         {

commit 1189df2cd7d4b6896ba22aa204c159ff2a425ead
Author: Daniel Kahn Gillmor <dkg at fifthhorseman.net>
Date:   Wed Nov 8 16:26:40 2017 +0100

    assuan: Use exponential decay for first 1s of spinlock.
    
    * common/asshelp.c (wait_for_sock): instead of checking the socket
    every second, we check 10 times in the first second (with exponential
    decay).
    --
    
    This cuts the wall clock time for the standard test suite roughly by
    half.
    
    GnuPG-bug-id: 3490
    Signed-off-by: Daniel Kahn Gillmor <dkg at fifthhorseman.net>
    (cherry picked from commit 149041b0b917f4298239fe18b5ebd5ead71584a6)

diff --git a/common/asshelp.c b/common/asshelp.c
index 68a41be..76f812d 100644
--- a/common/asshelp.c
+++ b/common/asshelp.c
@@ -310,14 +310,32 @@ unlock_spawning (lock_spawn_t *lock, const char *name)
 static gpg_error_t
 wait_for_sock (int secs, const char *name, const char *sockname, int verbose, assuan_context_t ctx, int *did_success_msg)
 {
-  int i;
   gpg_error_t err = 0;
-  for (i=0; i < secs; i++)
+  int target_us = secs * 1000000;
+  int elapsed_us = 0;
+  /*
+   * 977us * 1024 = just a little more than 1s.
+   * so we will double this timeout 10 times in the first
+   * second, and then switch over to 1s checkins.
+   */
+  int next_sleep_us = 977;
+  int lastalert = secs+1;
+  int secsleft;
+
+  while (elapsed_us < target_us)
     {
       if (verbose)
-        log_info (_("waiting for the %s to come up ... (%ds)\n"),
-                  name, secs - i);
-      gnupg_sleep (1);
+        {
+          secsleft = (target_us - elapsed_us)/1000000;
+          if (secsleft < lastalert)
+            {
+              log_info (_("waiting for the %s to come up ... (%ds)\n"),
+                        name, secsleft);
+              lastalert = secsleft;
+            }
+        }
+      gnupg_usleep (next_sleep_us);
+      elapsed_us += next_sleep_us;
       err = assuan_socket_connect (ctx, sockname, 0, 0);
       if (!err)
         {
@@ -329,6 +347,9 @@ wait_for_sock (int secs, const char *name, const char *sockname, int verbose, as
             }
           break;
         }
+      next_sleep_us *= 2;
+      if (next_sleep_us > 1000000)
+        next_sleep_us = 1000000;
     }
   return err;
 }

commit a22a55b994e06dd06157fbdabf5a402d8daf69c2
Author: Daniel Kahn Gillmor <dkg at fifthhorseman.net>
Date:   Wed Nov 8 16:15:30 2017 +0100

    assuan: Reorganize waiting for socket.
    
    * common/asshelp.c (wait_for_sock): New function, collecting
    codepaths from...
    (start_new_gpg_agent) here and...
    (start_new_dirmngr) here.
    --
    
    This has no functional change, but makes it easier to make this
    function more efficient.
    
    GnuPG-bug-id: 3490
    Signed-off-by: Daniel Kahn Gillmor <dkg at fifthhorseman.net>
    (cherry picked from commit 0471ff9d3bf8d6b9a359f3c426d70d0935066907)

diff --git a/common/asshelp.c b/common/asshelp.c
index f3a92f9..68a41be 100644
--- a/common/asshelp.c
+++ b/common/asshelp.c
@@ -307,6 +307,32 @@ unlock_spawning (lock_spawn_t *lock, const char *name)
     }
 }
 
+static gpg_error_t
+wait_for_sock (int secs, const char *name, const char *sockname, int verbose, assuan_context_t ctx, int *did_success_msg)
+{
+  int i;
+  gpg_error_t err = 0;
+  for (i=0; i < secs; i++)
+    {
+      if (verbose)
+        log_info (_("waiting for the %s to come up ... (%ds)\n"),
+                  name, secs - i);
+      gnupg_sleep (1);
+      err = assuan_socket_connect (ctx, sockname, 0, 0);
+      if (!err)
+        {
+          if (verbose)
+            {
+              log_info (_("connection to %s established\n"),
+                        name);
+              *did_success_msg = 1;
+            }
+          break;
+        }
+    }
+  return err;
+}
+
 /* Try to connect to the agent via socket or start it if it is not
    running and AUTOSTART is set.  Handle the server's initial
    greeting.  Returns a new assuan context at R_CTX or an error
@@ -433,25 +459,8 @@ start_new_gpg_agent (assuan_context_t *r_ctx,
             log_error ("failed to start agent '%s': %s\n",
                        agent_program, gpg_strerror (err));
           else
-            {
-              for (i=0; i < SECS_TO_WAIT_FOR_AGENT; i++)
-                {
-                  if (verbose)
-                    log_info (_("waiting for the agent to come up ... (%ds)\n"),
-                              SECS_TO_WAIT_FOR_AGENT - i);
-                  gnupg_sleep (1);
-                  err = assuan_socket_connect (ctx, sockname, 0, 0);
-                  if (!err)
-                    {
-                      if (verbose)
-                        {
-                          log_info (_("connection to agent established\n"));
-                          did_success_msg = 1;
-                        }
-                      break;
-                    }
-                }
-            }
+            err = wait_for_sock (SECS_TO_WAIT_FOR_AGENT, "agent",
+                                 sockname, verbose, ctx, &did_success_msg);
         }
 
       unlock_spawning (&lock, "agent");
@@ -584,29 +593,8 @@ start_new_dirmngr (assuan_context_t *r_ctx,
             log_error ("failed to start the dirmngr '%s': %s\n",
                        dirmngr_program, gpg_strerror (err));
           else
-            {
-              int i;
-
-              for (i=0; i < SECS_TO_WAIT_FOR_DIRMNGR; i++)
-                {
-                  if (verbose)
-                    log_info (_("waiting for the dirmngr "
-                                "to come up ... (%ds)\n"),
-                              SECS_TO_WAIT_FOR_DIRMNGR - i);
-                  gnupg_sleep (1);
-                  err = assuan_socket_connect (ctx, sockname, 0, 0);
-                  if (!err)
-                    {
-                      if (verbose)
-                        {
-                          log_info (_("connection to the dirmngr"
-                                      " established\n"));
-                          did_success_msg = 1;
-                        }
-                      break;
-                    }
-                }
-            }
+            err = wait_for_sock (SECS_TO_WAIT_FOR_DIRMNGR, "dirmngr",
+                                 sockname, verbose, ctx, &did_success_msg);
         }
 
       unlock_spawning (&lock, "dirmngr");

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

Summary of changes:
 common/asshelp.c  | 96 +++++++++++++++++++++++++++++++------------------------
 common/sysutils.c |  7 ++--
 dirmngr/dirmngr.c |  8 +++++
 3 files changed, 65 insertions(+), 46 deletions(-)


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




More information about the Gnupg-commits mailing list