Permalink
Browse files

Stop CxxBridge run loop when bridge is invalidated

Summary:
This fixes the `testModulesAreDeallocated` test. It was sometimes failing because the bridge's module was still alive. I debugged with the Xcode memory graph and found that the bridge was actually kept alive by a pointer from the NSThread.
By killing the runloop on the thread, the thread will eventually die and thus free the bridge.

One thing I didn't investigate was whether the thread was alive because of it receiving actual messages or just because the run loop was spinning.

Reviewed By: javache

Differential Revision: D5729925

fbshipit-source-id: 304f526129d2c5e137bfd791a6f957f6169b783e
  • Loading branch information...
mmmulani authored and facebook-github-bot committed Aug 30, 2017
1 parent a643927 commit 1f9fc0ee3a2964b067f0848e35603475e510067c
Showing with 4 additions and 0 deletions.
  1. +4 −0 React/CxxBridge/RCTCxxBridge.mm
@@ -962,6 +962,10 @@ - (void)invalidate
self->_moduleDataByID = nil;
self->_moduleClassesByID = nil;
self->_pendingCalls = nil;
[self->_jsThread cancel];
self->_jsThread = nil;
CFRunLoopStop(CFRunLoopGetCurrent());
}];
});
}

0 comments on commit 1f9fc0e

Please sign in to comment.