diff --git a/src/signal_handler.c b/src/signal_handler.c index ebce1377df4e4b1f589b277ce32d773c417302eb..bc31ecb504f6c3f426676842f1f0a3575f6ef329 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.69 1998/06/17 09:05:16 noring Exp $"); +RCSID("$Id: signal_handler.c,v 1.70 1998/06/25 14:54:35 grubba Exp $"); #ifdef HAVE_PASSWD_H # include <passwd.h> @@ -732,6 +732,7 @@ static void free_perishables(struct perishables *storage) #endif + exit_threads_disable(); } #endif @@ -767,7 +768,7 @@ void f_create_process(INT32 args) struct svalue *tmp; int e; - if(!args) return; + if(!args) return; /* FIXME: Why? */ check_all_args("create_process",args, BIT_ARRAY, BIT_MAPPING | BIT_VOID, 0); @@ -971,6 +972,8 @@ void f_create_process(INT32 args) storage.wanted_gids_array=0; #endif + init_threads_disable(); + SET_ONERROR(err, free_perishables, &storage); #ifdef HAVE_GETEUID @@ -1222,7 +1225,9 @@ void f_create_process(INT32 args) if(pid) { UNSET_ONERROR(err); + free_perishables(&storage); + pop_n_elems(sp - stack_save); if(!signal_evaluator_callback)