diff --git a/src/signal_handler.c b/src/signal_handler.c index e3d1b58ec3ce6281e001b9c8fabb2da59ee3a8e4..dcaead633e2fd86bcafc7bfb57e1e96bb9ba83e6 100644 --- a/src/signal_handler.c +++ b/src/signal_handler.c @@ -22,7 +22,7 @@ #include "builtin_functions.h" #include <signal.h> -RCSID("$Id: signal_handler.c,v 1.72 1998/06/30 21:00:00 grubba Exp $"); +RCSID("$Id: signal_handler.c,v 1.73 1998/07/09 21:22:29 grubba Exp $"); #ifdef HAVE_PASSWD_H # include <passwd.h> @@ -715,7 +715,8 @@ struct perishables static void free_perishables(struct perishables *storage) { - exit_threads_disable(NULL); + if (storage->disabled) + exit_threads_disable(NULL); if(storage->env) free((char *)storage->env); @@ -960,6 +961,7 @@ void f_create_process(INT32 args) storage.env=0; storage.argv=0; + storage.disabled=0; MAKE_CONSTANT_SHARED_STRING(storage.nice_s, "nice"); MAKE_CONSTANT_SHARED_STRING(storage.cwd_s, "cwd"); MAKE_CONSTANT_SHARED_STRING(storage.stdin_s, "stdin"); @@ -972,8 +974,6 @@ void f_create_process(INT32 args) storage.wanted_gids_array=0; #endif - init_threads_disable(NULL); - SET_ONERROR(err, free_perishables, &storage); #ifdef HAVE_GETEUID @@ -1213,6 +1213,10 @@ void f_create_process(INT32 args) storage.argv=(char **)xalloc((1+cmd->size) * sizeof(char *)); + init_threads_disable(NULL); + + storage.disabled = 1; + #if defined(HAVE_FORK1) && defined(_REENTRANT) pid=fork1(); #else