[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