diff options
author | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2015-06-26 09:08:20 +0200 |
---|---|---|
committer | Nikos Mavrogiannopoulos <nmav@redhat.com> | 2015-06-26 09:08:20 +0200 |
commit | eea3114a5315bc6ff1ba55a37342bedebc4e6dad (patch) | |
tree | 9f9bc7f5ac90b86f38dfe0ebc30560f9f3d34416 /lib/atfork.c | |
parent | 6f67fbf5c8466124c594daddcb6b035f19c16518 (diff) | |
download | gnutls-eea3114a5315bc6ff1ba55a37342bedebc4e6dad.tar.gz |
simplified fork detection
Diffstat (limited to 'lib/atfork.c')
-rw-r--r-- | lib/atfork.c | 46 |
1 files changed, 16 insertions, 30 deletions
diff --git a/lib/atfork.c b/lib/atfork.c index dec8d2cb2c..793de391cf 100644 --- a/lib/atfork.c +++ b/lib/atfork.c @@ -31,44 +31,17 @@ #include <sys/types.h> #include <atfork.h> -#ifndef _WIN32 - -# if defined(HAVE___REGISTER_ATFORK) || defined(HAVE_PTHREAD_ATFORK) -# define HAVE_ATFORK -# endif +unsigned int gnutls_forkid = 0; -/* The maximum number of users of the API */ -# define MAX_VALS 6 - -static unsigned int * fvals[MAX_VALS]; -static unsigned int fvals_size = 0; +#ifndef _WIN32 # ifdef HAVE_ATFORK static void fork_handler(void) { - unsigned i; - for (i=0;i<fvals_size;i++) - *fvals[i] = 1; + gnutls_forkid++; } # endif -static void set_val_on_fork(unsigned int *val, unsigned int def) -{ - if (fvals_size >= MAX_VALS) - abort(); /* internal error */ - *val = def; - fvals[fvals_size++] = val; -} - -void _gnutls_fork_set_val(unsigned int *val) -{ -# ifdef HAVE_ATFORK - set_val_on_fork(val, 0); -# else - set_val_on_fork(val, getpid()); -# endif -} - # if defined(HAVE_PTHREAD_ATFORK) # include <pthread.h> @@ -93,9 +66,22 @@ int _gnutls_register_fork_handler(void) # else +unsigned int _gnutls_get_forkid(void) +{ + return getpid(); +} + +int _gnutls_detect_fork(unsigned int forkid) +{ + if (getpid() == forkid) + return 0; + return 1; +} + /* we have to detect fork manually */ int _gnutls_register_fork_handler(void) { + gnutls_forkid = getpid(); return 0; } |