Interruptible FFI calls with pthread_kill and CancelSynchronousIO. v4
[ghc-hetmet.git] / rts / sm / MarkWeak.c
index e65c176..d4d708e 100644 (file)
@@ -270,8 +270,10 @@ static rtsBool tidyThreadList (generation *gen)
         
         // if the thread is not masking exceptions but there are
         // pending exceptions on its queue, then something has gone
         
         // if the thread is not masking exceptions but there are
         // pending exceptions on its queue, then something has gone
-        // wrong:
+        // wrong.  However, pending exceptions are OK if there is an
+        // uninterruptible FFI call.
         ASSERT(t->blocked_exceptions == END_BLOCKED_EXCEPTIONS_QUEUE
         ASSERT(t->blocked_exceptions == END_BLOCKED_EXCEPTIONS_QUEUE
+               || t->why_blocked == BlockedOnCCall
                || (t->flags & TSO_BLOCKEX));
         
         if (tmp == NULL) {
                || (t->flags & TSO_BLOCKEX));
         
         if (tmp == NULL) {