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)