diff --git a/src/builtin_functions.c b/src/builtin_functions.c
index 9820f6bbd8cfa5a3b4cb6973a068ae1e8ba485d6..f422cf214c426fbce4440643cc0553b41df02843 100644
--- a/src/builtin_functions.c
+++ b/src/builtin_functions.c
@@ -623,6 +623,8 @@ void f_exit(INT32 args)
   if(sp[-args].type != T_INT)
     error("Bad argument 1 to exit.\n");
 
+  exit_on_error="Pike is exiting: ";
+
   call_callback(&exit_callbacks, (void *)0);
   free_callback(&exit_callbacks);
 
diff --git a/src/error.c b/src/error.c
index c09e5b30da3cc287823c90cdd52aed36637b60c5..1770453aa3ba3a1c7463c4d4da3f04c1c3254bdb 100644
--- a/src/error.c
+++ b/src/error.c
@@ -88,7 +88,7 @@ void va_error(char *fmt, va_list args)
     abort();
   }
 
-  if(exit_on_error && !recoveries)
+  if(exit_on_error || !recoveries)
   {
     if(!exit_on_error)
       exit_on_error="No error recovery context: ";
diff --git a/src/main.c b/src/main.c
index 34bbe127fd7442630b317ffb0155df41d25850e6..9834a4ad6794fc80fb49433bbe81f2b1dd8d44c1 100644
--- a/src/main.c
+++ b/src/main.c
@@ -264,7 +264,6 @@ void exit_main()
   void cleanup_pike_types();
   void cleanup_program();
 
-  exit_on_error="Pike is exiting: ";
   cleanup_objects();
   exit_signals();
   exit_lex();