Use granular locking in SmartExceptionTracer
Summary: `throwCallback()` holds a read lock on the global map while unwinding the stack trace, blocking all other threads from deleting (and thus throwing) exceptions, since the deleter needs a wlock. Switch to per-`ExceptionMeta` locking (on top of the map's locks), so we can hold the global lock only for the time to update the map, and move all unwinding, allocation, deallocation, and callbacks outside of it. Reviewed By: luciang Differential Revision: D31905278 fbshipit-source-id: f46228dd815bfde844165dd7aee92d6c023ff049
Showing
Please register or sign in to comment