diff --git a/src/lpc_signal.c b/src/lpc_signal.c
index cc9108068a1f320d1de07b170e1b3b60994dd2d1..97d7234a376084e3a55cb6a3d7f8f474204a6246 100644
--- a/src/lpc_signal.c
+++ b/src/lpc_signal.c
@@ -10,6 +10,7 @@
 #include "add_efun.h"
 #include "macros.h"
 #include "backend.h"
+#include "error.h"
 #include <signal.h>
 #include <sys/wait.h>
 
@@ -228,9 +229,13 @@ static RETSIGTYPE receive_signal(int signum)
 #endif
 }
 
+static int signalling=0;
+
+static void unset_signalling(void *notused) { signalling=0; }
+
 void check_signals()
 {
-  static int signalling=0;
+  ONERROR ebuf;
 #ifdef DEBUG
   extern int d_flag;
   if(d_flag>5) do_debug(0);
@@ -241,6 +246,8 @@ void check_signals()
     int tmp=firstsig;
     signalling=1;
 
+    SET_ONERROR(ebuf,unset_signalling,0);
+
     while(lastsig != tmp)
     {
       if(++lastsig == SIGNAL_BUFFER) lastsig=0;
@@ -250,6 +257,8 @@ void check_signals()
       pop_stack();
     }
 
+    UNSET_ONERROR(ebuf);
+
     signalling=0;
   }
 }