[git] GnuPG - branch, master, updated. gnupg-2.1.15-189-geda1764
by NIIBE Yutaka
cvs at cvs.gnupg.org
Tue Oct 4 02:23:28 CEST 2016
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 eda17649f8bd3b8ce7bfc00a3c11cbcae63c845d (commit)
from a43739a2456a38c01704d8a52dca441055e29bc6 (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 eda17649f8bd3b8ce7bfc00a3c11cbcae63c845d
Author: NIIBE Yutaka <gniibe at fsij.org>
Date: Tue Oct 4 09:01:13 2016 +0900
agent, dirmngr, scd: npth_init must be after fork.
* agent/gpg-agent.c (thread_init_once, initialize_modules): New.
(main): Make sure no daemonizing-fork call after npth_init, and no npth
calls before npth_init, with care of npth calls by assuan hooks.
* dirmngr/dirmngr.c (thread_init): New.
(main): Make sure npth_init must not be called before daemonizing fork.
* scd/scdaemon.c (main): Likewise.
--
It is simply the best for nPth not to allow the daemonizing fork after
npth_init, because semantics and implementations of forked child process
in a threaded application is a difficult corner case.
GnuPG-bug-id: 1779
Signed-off-by: NIIBE Yutaka <gniibe at fsij.org>
diff --git a/agent/gpg-agent.c b/agent/gpg-agent.c
index 15202ac..e65198a 100644
--- a/agent/gpg-agent.c
+++ b/agent/gpg-agent.c
@@ -718,6 +718,29 @@ finalize_rereadable_options (void)
}
+static void
+thread_init_once (void)
+{
+ static int npth_initialized = 0;
+
+ if (!npth_initialized)
+ {
+ npth_initialized++;
+ npth_init ();
+ }
+}
+
+static void
+initialize_modules (void)
+{
+ thread_init_once ();
+ assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH);
+ initialize_module_cache ();
+ initialize_module_call_pinentry ();
+ initialize_module_call_scd ();
+ initialize_module_trustlist ();
+}
+
/* The main entry point. */
int
@@ -765,14 +788,11 @@ main (int argc, char **argv )
i18n_init ();
init_common_subsystems (&argc, &argv);
- npth_init ();
-
malloc_hooks.malloc = gcry_malloc;
malloc_hooks.realloc = gcry_realloc;
malloc_hooks.free = gcry_free;
assuan_set_malloc_hooks (&malloc_hooks);
assuan_set_gpg_err_source (GPG_ERR_SOURCE_DEFAULT);
- assuan_set_system_hooks (ASSUAN_SYSTEM_NPTH);
assuan_sock_init ();
setup_libassuan_logging (&opt.debug, NULL);
@@ -1080,16 +1100,12 @@ main (int argc, char **argv )
exit (1);
}
- initialize_module_cache ();
- initialize_module_call_pinentry ();
- initialize_module_call_scd ();
- initialize_module_trustlist ();
-
/* Try to create missing directories. */
create_directories ();
if (debug_wait && pipe_server)
{
+ thread_init_once ();
log_debug ("waiting for debugger - my pid is %u .....\n",
(unsigned int)getpid());
gnupg_sleep (debug_wait);
@@ -1196,6 +1212,8 @@ main (int argc, char **argv )
/* This is the simple pipe based server */
ctrl_t ctrl;
+ initialize_modules ();
+
ctrl = xtrycalloc (1, sizeof *ctrl);
if (!ctrl)
{
@@ -1403,6 +1421,8 @@ main (int argc, char **argv )
This is the child
*/
+ initialize_modules ();
+
/* Detach from tty and put process into a new session */
if (!nodetach )
{
diff --git a/dirmngr/dirmngr.c b/dirmngr/dirmngr.c
index 64d93b7..621c2bb 100644
--- a/dirmngr/dirmngr.c
+++ b/dirmngr/dirmngr.c
@@ -647,6 +647,22 @@ pid_suffix_callback (unsigned long *r_suffix)
#endif /*!HAVE_W32_SYSTEM*/
+static void
+thread_init (void)
+{
+ npth_init ();
+
+ /* Now with NPth running we can set the logging callback. Our
+ windows implementation does not yet feature the NPth TLS
+ functions. */
+#ifndef HAVE_W32_SYSTEM
+ if (npth_key_create (&my_tlskey_current_fd, NULL) == 0)
+ if (npth_setspecific (my_tlskey_current_fd, NULL) == 0)
+ log_set_pid_suffix_cb (pid_suffix_callback);
+#endif /*!HAVE_W32_SYSTEM*/
+}
+
+
int
main (int argc, char **argv)
{
@@ -680,8 +696,6 @@ main (int argc, char **argv)
i18n_init ();
init_common_subsystems (&argc, &argv);
- npth_init ();
-
gcry_control (GCRYCTL_DISABLE_SECMEM, 0);
/* Check that the libraries are suitable. Do it here because
@@ -722,15 +736,6 @@ main (int argc, char **argv)
if (shell && strlen (shell) >= 3 && !strcmp (shell+strlen (shell)-3, "csh") )
csh_style = 1;
- /* Now with NPth running we can set the logging callback. Our
- windows implementation does not yet feature the NPth TLS
- functions. */
-#ifndef HAVE_W32_SYSTEM
- if (npth_key_create (&my_tlskey_current_fd, NULL) == 0)
- if (npth_setspecific (my_tlskey_current_fd, NULL) == 0)
- log_set_pid_suffix_cb (pid_suffix_callback);
-#endif /*!HAVE_W32_SYSTEM*/
-
/* Reset rereadable options to default values. */
parse_rereadable_options (NULL, 0);
@@ -981,6 +986,7 @@ main (int argc, char **argv)
ldap_wrapper_launch_thread ();
#endif /*USE_LDAP*/
+ thread_init ();
cert_cache_init ();
crl_cache_init ();
start_command_handler (ASSUAN_INVALID_FD);
@@ -1179,6 +1185,7 @@ main (int argc, char **argv)
ldap_wrapper_launch_thread ();
#endif /*USE_LDAP*/
+ thread_init ();
cert_cache_init ();
crl_cache_init ();
handle_connections (fd);
@@ -1206,6 +1213,7 @@ main (int argc, char **argv)
#if USE_LDAP
ldap_wrapper_launch_thread ();
#endif /*USE_LDAP*/
+ thread_init ();
cert_cache_init ();
crl_cache_init ();
if (!argc)
@@ -1231,6 +1239,7 @@ main (int argc, char **argv)
#if USE_LDAP
ldap_wrapper_launch_thread ();
#endif /*USE_LDAP*/
+ thread_init ();
cert_cache_init ();
crl_cache_init ();
rc = crl_fetch (&ctrlbuf, argv[0], &reader);
diff --git a/scd/scdaemon.c b/scd/scdaemon.c
index bf54d95..3571e66 100644
--- a/scd/scdaemon.c
+++ b/scd/scdaemon.c
@@ -422,8 +422,6 @@ main (int argc, char **argv )
i18n_init ();
init_common_subsystems (&argc, &argv);
- npth_init ();
-
ksba_set_malloc_hooks (gcry_malloc, gcry_realloc, gcry_free);
malloc_hooks.malloc = gcry_malloc;
@@ -724,6 +722,8 @@ main (int argc, char **argv )
}
#endif
+ npth_init ();
+
/* If --debug-allow-core-dump has been given we also need to
switch the working directory to a place where we can actually
write. */
@@ -861,6 +861,8 @@ main (int argc, char **argv )
/* This is the child. */
+ npth_init ();
+
/* Detach from tty and put process into a new session. */
if (!nodetach )
{
-----------------------------------------------------------------------
Summary of changes:
agent/gpg-agent.c | 36 ++++++++++++++++++++++++++++--------
dirmngr/dirmngr.c | 31 ++++++++++++++++++++-----------
scd/scdaemon.c | 6 ++++--
3 files changed, 52 insertions(+), 21 deletions(-)
hooks/post-receive
--
The GNU Privacy Guard
http://git.gnupg.org
More information about the Gnupg-commits
mailing list