diff --git a/src/error.c b/src/error.c
index 99a085d7653902070ccc9c0aef6faeac43b1fd9a..abf39b52fe0e36da6dd13b713754f7b36d813ab9 100644
--- a/src/error.c
+++ b/src/error.c
@@ -2,7 +2,7 @@
 || This file is part of Pike. For copyright information see COPYRIGHT.
 || Pike is distributed under GPL, LGPL and MPL. See the file COPYING
 || for more information.
-|| $Id: error.c,v 1.154 2008/04/12 14:04:09 grubba Exp $
+|| $Id: error.c,v 1.155 2008/05/24 12:28:58 mast Exp $
 */
 
 #define NO_PIKE_SHORTHAND
@@ -129,14 +129,17 @@ PMOD_EXPORT DECLSPEC(noreturn) void pike_throw(void) ATTRIBUTE((noreturn))
       Pike_interpreter.recoveries->onerror=Pike_interpreter.recoveries->onerror->previous;
     }
 
-    if (Pike_interpreter.catch_ctx &&
-	&Pike_interpreter.catch_ctx->recovery == Pike_interpreter.recoveries) {
-      struct catch_context *cc = Pike_interpreter.catch_ctx;
-      Pike_interpreter.catch_ctx = cc->prev;
-      really_free_catch_context (cc);
+    {
+      JMP_BUF *prev_rec = Pike_interpreter.recoveries->previous;
+      if (Pike_interpreter.catch_ctx &&
+	  (&Pike_interpreter.catch_ctx->recovery ==
+	   Pike_interpreter.recoveries)) {
+	struct catch_context *cc = Pike_interpreter.catch_ctx;
+	Pike_interpreter.catch_ctx = cc->prev;
+	really_free_catch_context (cc);
+      }
+      Pike_interpreter.recoveries = prev_rec;
     }
-
-    Pike_interpreter.recoveries=Pike_interpreter.recoveries->previous;
   }
 
   if(!Pike_interpreter.recoveries)