aharries-upmem added a comment. In D93479#2839076 <https://reviews.llvm.org/D93479#2839076>, @jingham wrote:
> I wonder if instead of doing: > > // Use our target to get a shared pointer to ourselves... > if (m_finalize_called && !PrivateStateThreadIsValid()) > BroadcastEvent(event_sp); > else > m_private_state_broadcaster.BroadcastEvent(event_sp); > > -> > > m_private_state_broadcaster.BroadcastEvent(event_sp); > > we should have just replaced m_finalize_called with m_finalizing? If you > tried to sent the exited event to the private event broadcaster after it was > shut down, that event would never get to the public process event queue. Hi Jim, I've tried reverting this check and replacing `m_finalize_called` with `m_finalizing`, but sadly the code still seems to deadlock. I'm also a little suspicious of (in `Process::Finalize`): if (m_finalizing.exchange(true)) return; rather than m_finalize_called = true; As it would seem (to me) to introduce the possibility of an early exit where there wasn't one before. I don't know if that was intended (to avoid things being done twice?), but it's the only other place I can see a clear change in control flow. Repository: rG LLVM Github Monorepo CHANGES SINCE LAST ACTION https://reviews.llvm.org/D93479/new/ https://reviews.llvm.org/D93479 _______________________________________________ lldb-commits mailing list lldb-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits