Closed Bug 1649776 Opened 4 years ago Closed 4 years ago

deadlock when profiling with the nativeallocations feature on Mac

Categories

(Core :: Gecko Profiler, defect, P2)

defect

Tracking

()

RESOLVED FIXED
mozilla80
Tracking Status
firefox80 --- fixed

People

(Reporter: florian, Assigned: mozbugz)

References

Details

Attachments

(1 file)

I've tried to profile memory allocations on DAMP by adding the nativeallocations feature at https://searchfox.org/mozilla-central/rev/5a4aaccb28665807a6fd49cf48367d47fbb5a19a/testing/talos/talos/talos-powers/api.js#122 and running this command:
./mach talos-test -a damp --subtest inspector --gecko-profile --cycles 1

Before bug 1642726, I had a deadlock all the time. Now it still deadlocks pretty often, but sometimes I manage to get a full run resulting in a profile.

Using lldb, I captured a backtrace of the blocked mainthread:

* thread #1, name = 'MainThread', queue = 'com.apple.main-thread', stop reason = signal SIGSTOP
  * frame #0: 0x00007fff73edc062 libsystem_kernel.dylib`__psynch_mutexwait + 10
    frame #1: 0x00007fff73f9a917 libsystem_pthread.dylib`_pthread_mutex_firstfit_lock_wait + 83
    frame #2: 0x00007fff73f98937 libsystem_pthread.dylib`_pthread_mutex_firstfit_lock_slow + 222
    frame #3: 0x000000010a35fcaa libmozglue.dylib`mozilla::detail::MutexImpl::lock() at Mutex_posix.cpp:118:3 [opt]
    frame #4: 0x000000010a35fca2 libmozglue.dylib`mozilla::detail::MutexImpl::lock(this=0x000000010bbc1070) at Mutex_posix.cpp:163 [opt]
    frame #5: 0x000000010d28639d XUL`mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue>::PutEventInternal(already_AddRefed<nsIRunnable>&&, mozilla::EventQueuePriority, mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue>::NestedSink*) [inlined] mozilla::OffTheBooksMutex::Lock(this=0x000000010bbc1070) at Mutex.h:63:23 [opt]
    frame #6: 0x000000010d286395 XUL`mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue>::PutEventInternal(already_AddRefed<nsIRunnable>&&, mozilla::EventQueuePriority, mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue>::NestedSink*) [inlined] mozilla::detail::BaseAutoLock<mozilla::Mutex&>::BaseAutoLock(this=<unavailable>, aLock=0x000000010bbc1070) at Mutex.h:161 [opt]
    frame #7: 0x000000010d286391 XUL`mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue>::PutEventInternal(already_AddRefed<nsIRunnable>&&, mozilla::EventQueuePriority, mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue>::NestedSink*) [inlined] mozilla::detail::BaseAutoLock<mozilla::Mutex&>::BaseAutoLock(this=<unavailable>, aLock=0x000000010bbc1070) at Mutex.h:159 [opt]
    frame #8: 0x000000010d286391 XUL`mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue>::PutEventInternal(this=0x000000010bbc1040, aEvent=<unavailable>, aPriority=Normal, aSink=0x0000000000000000) at ThreadEventQueue.cpp:106 [opt]
    frame #9: 0x000000010d287388 XUL`mozilla::ThreadEventTarget::Dispatch(this=0x000000010bbf8a60, aEvent=<unavailable>, aFlags=0) at ThreadEventTarget.cpp:161:15 [opt]
    frame #10: 0x000000010d28be6f XUL`NS_DispatchToMainThread(aEvent=<unavailable>, aDispatchFlags=0) at nsThreadUtils.cpp:265:18 [opt]
    frame #11: 0x0000000110ed7269 XUL`std::__1::__function::__func<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20, std::__1::allocator<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20>, void (mozilla::ProfileBufferControlledChunkManager::Update&&)>::operator()(mozilla::ProfileBufferControlledChunkManager::Update&&) [inlined] mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(aUpdate=<unavailable>)::$_20::operator()(mozilla::ProfileBufferControlledChunkManager::Update&&) const at ProfilerParent.cpp:164:19 [opt]
    frame #12: 0x0000000110ed71af XUL`std::__1::__function::__func<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20, std::__1::allocator<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20>, void (mozilla::ProfileBufferControlledChunkManager::Update&&)>::operator()(mozilla::ProfileBufferControlledChunkManager::Update&&) [inlined] decltype(__args=<unavailable>)::$_20&>(fp)(std::__1::forward<mozilla::ProfileBufferControlledChunkManager::Update>(fp0))) std::__1::__invoke<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20&, mozilla::ProfileBufferControlledChunkManager::Update>(mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20&, mozilla::ProfileBufferControlledChunkManager::Update&&) at type_traits:3530 [opt]
    frame #13: 0x0000000110ed71af XUL`std::__1::__function::__func<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20, std::__1::allocator<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20>, void (mozilla::ProfileBufferControlledChunkManager::Update&&)>::operator()(mozilla::ProfileBufferControlledChunkManager::Update&&) [inlined] void std::__1::__invoke_void_return_wrapper<void>::__call<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(__args=<unavailable>)::$_20&, mozilla::ProfileBufferControlledChunkManager::Update>(mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20&, mozilla::ProfileBufferControlledChunkManager::Update&&) at __functional_base:348 [opt]
    frame #14: 0x0000000110ed71af XUL`std::__1::__function::__func<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20, std::__1::allocator<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20>, void (mozilla::ProfileBufferControlledChunkManager::Update&&)>::operator()(mozilla::ProfileBufferControlledChunkManager::Update&&) [inlined] std::__1::__function::__alloc_func<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20, std::__1::allocator<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20>, void (mozilla::ProfileBufferControlledChunkManager::Update&&)>::operator(this=<unavailable>, __arg=<unavailable>)(mozilla::ProfileBufferControlledChunkManager::Update&&) at functional:1533 [opt]
    frame #15: 0x0000000110ed71ab XUL`std::__1::__function::__func<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20, std::__1::allocator<mozilla::ProfileBufferGlobalController::ProfileBufferGlobalController(mozilla::ProfilerParentTracker&, unsigned long)::$_20>, void (mozilla::ProfileBufferControlledChunkManager::Update&&)>::operator(this=<unavailable>, __arg=<unavailable>)(mozilla::ProfileBufferControlledChunkManager::Update&&) at functional:1707 [opt]
    frame #16: 0x0000000110ecb219 XUL`mozilla::ProfileBufferChunkManagerWithLocalLimit::ReleaseChunks(mozilla::UniquePtr<mozilla::ProfileBufferChunk, mozilla::DefaultDelete<mozilla::ProfileBufferChunk> >) [inlined] std::__1::__function::__value_func<void (mozilla::ProfileBufferControlledChunkManager::Update&&)>::operator(this=<unavailable>, __args=<unavailable>)(mozilla::ProfileBufferControlledChunkManager::Update&&) const at functional:1860:16 [opt]
    frame #17: 0x0000000110ecb203 XUL`mozilla::ProfileBufferChunkManagerWithLocalLimit::ReleaseChunks(mozilla::UniquePtr<mozilla::ProfileBufferChunk, mozilla::DefaultDelete<mozilla::ProfileBufferChunk> >) [inlined] std::__1::function<void (mozilla::ProfileBufferControlledChunkManager::Update&&)>::operator(this=<unavailable>, __arg=<unavailable>)(mozilla::ProfileBufferControlledChunkManager::Update&&) const at functional:2419 [opt]
    frame #18: 0x0000000110ecb203 XUL`mozilla::ProfileBufferChunkManagerWithLocalLimit::ReleaseChunks(this=0x000000010c835450, aChunks=<unavailable>) at ProfileBufferChunkManagerWithLocalLimit.h:139 [opt]
    frame #19: 0x0000000110ecdd22 XUL`auto mozilla::ProfileChunkedBuffer::ReserveAndPutRaw<decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(), decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(this=0x00007ffee58e96f0)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&, mozilla::baseprofiler::detail::BaseProfilerMaybeAutoLock&, unsigned long long)::'lambda'()::operator()() const at ProfileChunkedBuffer.h:1461:24 [opt]
    frame #20: 0x0000000110ecd880 XUL`auto mozilla::ProfileChunkedBuffer::ReserveAndPutRaw<decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(), decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&, mozilla::baseprofiler::detail::BaseProfilerMaybeAutoLock&, unsigned long long) [inlined] mozilla::ScopeExit<auto mozilla::ProfileChunkedBuffer::ReserveAndPutRaw<decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(), decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&, mozilla::baseprofiler::detail::BaseProfilerMaybeAutoLock&, unsigned long long)::'lambda'()>::~ScopeExit(this=<unavailable>) at ScopeExit.h:111:7 [opt]
    frame #21: 0x0000000110ecd87b XUL`auto mozilla::ProfileChunkedBuffer::ReserveAndPutRaw<decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(), decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&, mozilla::baseprofiler::detail::BaseProfilerMaybeAutoLock&, unsigned long long) [inlined] mozilla::ScopeExit<auto mozilla::ProfileChunkedBuffer::ReserveAndPutRaw<decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(), decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&, mozilla::baseprofiler::detail::BaseProfilerMaybeAutoLock&, unsigned long long)::'lambda'()>::~ScopeExit(this=<unavailable>) at ScopeExit.h:109 [opt]
    frame #22: 0x0000000110ecd87b XUL`auto mozilla::ProfileChunkedBuffer::ReserveAndPutRaw<decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(), decltype(std::forward<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(this=<unavailable>, aCallbackBlockBytes=<unavailable>, aCallback=<unavailable>, aLock=<unavailable>, aBlockCount=1)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&, mozilla::baseprofiler::detail::BaseProfilerMaybeAutoLock&, unsigned long long) at ProfileChunkedBuffer.h:1478 [opt]
    frame #23: 0x0000000110ecd598 XUL`mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&) [inlined] decltype(this=0x000000010a5b6010, aCallbackEntryBytes=<unavailable>, aCallback=<unavailable>)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(fp0)(decltype(std::__1::__declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>(0)) std::__1::declval<mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&>()())) mozilla::ProfileChunkedBuffer::ReserveAndPut<mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(), mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)>(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&, mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(ProfileBufferEntry::Kind const&, int const&, mozilla::ProfileBufferUnownedCString const&, unsigned int const&, ProfilerMarkerPayload const* const&, double const&)::'lambda'(mozilla::Maybe<mozilla::ProfileBufferEntryWriter>&)&&) at ProfileChunkedBuffer.h:624:12 [opt]
    frame #24: 0x0000000110ecd537 XUL`mozilla::ProfileBufferBlockIndex mozilla::ProfileChunkedBuffer::PutObjects<ProfileBufferEntry::Kind, int, mozilla::ProfileBufferUnownedCString, unsigned int, ProfilerMarkerPayload const*, double>(this=0x000000010a5b6010, aTs=<unavailable>, aTs=<unavailable>, aTs=<unavailable>, aTs=<unavailable>, aTs=<unavailable>, aTs=0x00007ffee58e9860) at ProfileChunkedBuffer.h:665 [opt]
    frame #25: 0x0000000110eb2088 XUL`maybelocked_profiler_add_marker_for_thread(int, JS::ProfilingCategoryPair, char const*, ProfilerMarkerPayload const&, PSAutoLock const*) [inlined] void StoreMarker<mozilla::ProfileChunkedBuffer>(aBuffer=<unavailable>, aThreadId=<unavailable>, aMarkerName=<unavailable>, aCategoryPair=<unavailable>, aPayload=<unavailable>) at platform.cpp:1549:11 [opt]
    frame #26: 0x0000000110eb202a XUL`maybelocked_profiler_add_marker_for_thread(aThreadId=<unavailable>, aCategoryPair=<unavailable>, aMarkerName=<unavailable>, aPayload=<unavailable>, aLockOrNull=<unavailable>) at platform.cpp:5250 [opt]
    frame #27: 0x0000000110eb21bc XUL`profiler_add_native_allocation_marker(aMainThreadId=3179978, aSize=96, aMemoryAddress=6730948768) at platform.cpp:5288:3 [opt]
    frame #28: 0x0000000110e87e5d XUL`mozilla::profiler::AllocCallback(aPtr=0x00000001913220a0, aReqSize=<unavailable>) at memory_hooks.cpp:391:7 [opt]
    frame #29: 0x0000000110e87937 XUL`replace_malloc(aSize=<unavailable>) at memory_hooks.cpp:452:3 [opt]
    frame #30: 0x000000010a33236e libmozglue.dylib`::moz_xmalloc(size=88) at mozalloc.cpp:52:15 [opt]
    frame #31: 0x000000010d27a9b7 XUL`mozilla::PrioritizedEventQueue::PutEvent(already_AddRefed<nsIRunnable>&&, mozilla::EventQueuePriority, mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&, mozilla::BaseTimeDuration<mozilla::TimeDurationValueCalculator>*) [inlined] operator new(size=88) at cxxalloc.h:33:10 [opt]
    frame #32: 0x000000010d27a9ad XUL`mozilla::PrioritizedEventQueue::PutEvent(already_AddRefed<nsIRunnable>&&, mozilla::EventQueuePriority, mozilla::detail::BaseAutoLock<mozilla::Mutex&> const&, mozilla::BaseTimeDuration<mozilla::TimeDurationValueCalculator>*) [inlined] mozilla::TaskController::DispatchRunnable(this=<unavailable>, aRunnable=<unavailable>, aPriority=3, aManager=0x0000000000000000) at TaskController.cpp:232 [opt]
    frame #33: 0x000000010d27a9ad XUL`mozilla::PrioritizedEventQueue::PutEvent(this=0x000000010c6478e0, aEvent=<unavailable>, aPriority=Normal, aProofOfLock=0x00007ffee58e9a50, aDelay=<unavailable>) at PrioritizedEventQueue.cpp:57 [opt]
    frame #34: 0x000000010d286406 XUL`mozilla::ThreadEventQueue<mozilla::PrioritizedEventQueue>::PutEventInternal(this=0x000000010bbc1040, aEvent=<unavailable>, aPriority=Normal, aSink=0x0000000000000000) at ThreadEventQueue.cpp:119:19 [opt]
    frame #35: 0x000000010d287388 XUL`mozilla::ThreadEventTarget::Dispatch(this=0x000000010bbf8a60, aEvent=<unavailable>, aFlags=0) at ThreadEventTarget.cpp:161:15 [opt]
    frame #36: 0x000000010d2a79ee XUL`NS_InvokeByIndex at xptcinvoke_asm_x86_64_unix.S:106
    frame #37: 0x000000010dc743ab XUL`XPCWrappedNative::CallMethod(XPCCallContext&, XPCWrappedNative::CallMode) [inlined] CallMethodHelper::Invoke(this=<unavailable>) at XPCWrappedNative.cpp:1618:10 [opt]
    frame #38: 0x000000010dc7438b XUL`XPCWrappedNative::CallMethod(XPCCallContext&, XPCWrappedNative::CallMode) [inlined] CallMethodHelper::Call(this=<unavailable>) at XPCWrappedNative.cpp:1174 [opt]
    frame #39: 0x000000010dc7389b XUL`XPCWrappedNative::CallMethod(ccx=<unavailable>, mode=<unavailable>) at XPCWrappedNative.cpp:1140 [opt]
    frame #40: 0x000000010dc759f8 XUL`XPC_WN_CallMethod(cx=<unavailable>, argc=<unavailable>, vp=<unavailable>) at XPCWrappedNativeJSOps.cpp:946:10 [opt]

I'm not sure I interpret this stack correctly, but I think it shows an unfortunate interaction between the ProfileChunkedBuffer and the native allocations sampling.

Thank you for the detailed report.

In bug 1642726 I fixed the deadlock between the Profiler's gPSMutex and the OS' queue.

I think this one here is with the Profiler's buffer's mutex, one level deeper. I initially thought this was the problem in bug 1642726 (before seeing that reports were pointing at gPSMutex instead), so I've got a solution almost ready, using a separate mutex for the buffer-update callback.

Assignee: nobody → gsquelart
Severity: -- → S3
Priority: -- → P2

To avoid deadlocks between the buffer main mutex and the externally-provided update callback code, the callback storage is now using a separate mutex, and both mutexes are never held at the same time.

Pushed by gsquelart@mozilla.com:
https://hg.mozilla.org/integration/autoland/rev/244276d1e389
Use a separate mutex to access ProfileBufferChunkManagerWithLocalLimit::mUpdateCallback - r=canaltinova
Status: NEW → RESOLVED
Closed: 4 years ago
Resolution: --- → FIXED
Target Milestone: --- → mozilla80
You need to log in before you can comment on or make changes to this bug.

Attachment

General

Created:
Updated:
Size: