Skip to content

Commit

Permalink
Stop CxxBridge run loop when bridge is invalidated
Browse files Browse the repository at this point in the history
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
Mehdi Mulani authored and facebook-github-bot committed Aug 30, 2017
1 parent a643927 commit 1f9fc0e
Showing 1 changed file with 4 additions and 0 deletions.
4 changes: 4 additions & 0 deletions React/CxxBridge/RCTCxxBridge.mm
Original file line number Diff line number Diff line change
Expand Up @@ -962,6 +962,10 @@ - (void)invalidate
self->_moduleDataByID = nil;
self->_moduleClassesByID = nil;
self->_pendingCalls = nil;

[self->_jsThread cancel];
self->_jsThread = nil;
CFRunLoopStop(CFRunLoopGetCurrent());
}];
});
}
Expand Down

0 comments on commit 1f9fc0e

Please sign in to comment.