diff --git a/src/error.h b/src/error.h
index 7ec91722a80f7453c038c257ce83cdc6fb7e94e9..e28b84cbfa515429058df22c30aa46cd46fde005 100644
--- a/src/error.h
+++ b/src/error.h
@@ -56,7 +56,14 @@ extern struct svalue throw_value;
      recoveries->onerror=&X; \
   }while(0)
 
+#ifdef DEBUG
+#define UNSET_ONERROR(X) do {\
+  if(recoveries->onerror != &(X)) fatal("UNSET_ONERROR out of sync.\n"); \
+  recoveries->onerror=(X).previous; \
+  } while(0)
+#else
 #define UNSET_ONERROR(X) recoveries->onerror=X.previous
+#endif
 
 /* Prototypes begin here */
 JMP_BUF *init_recovery(JMP_BUF *r);