Index: /branches/watchpoints/lisp-kernel/x86-exceptions.c
===================================================================
--- /branches/watchpoints/lisp-kernel/x86-exceptions.c	(revision 12907)
+++ /branches/watchpoints/lisp-kernel/x86-exceptions.c	(revision 12908)
@@ -3747,4 +3747,20 @@
 }
 
+/* If some other thread is waiting to handle an exception, it may
+   not be safe to unwatch the object. */
+int
+safe_to_unwatch(TCR *tcr)
+{
+  TCR *other;
+
+  for (other = tcr->next; other != tcr; other = other->next) {
+    if (other->xframe) {
+      return false;
+    }
+  }
+  return true;
+}
+
+
 /*
  * We expect the watched object in arg_y, and the new uninitialized
@@ -3761,4 +3777,9 @@
   LispObj *newnode = (LispObj *)untag(new);
   area *a = area_containing((BytePtr)old);
+
+  if (safe_to_unwatch(tcr) == false) {
+    xpGPR(xp, Iarg_z) = lisp_nil;
+    return 0;
+  }
 
   if (a && a->code == AREA_WATCHED) {
