https://s3.amazonaws.com/clickhouse-test-reports/0/8ea7b9c9784f7014dccb4fe0dfd269265126a30d/stress_test__msan_.html

Post-processed traces: https://pastila.nl/?0006a09d/4a3864799d8b23c3998deeefcdca5d8f
Post-processed traces without boring threads: https://pastila.nl/?0006a09d/f342d95a823d513df62d68a5d8a1a50b

Explanation: https://pastila.nl/?000fcc82/3a48f372d3410a8691d50cb5647b2c20
{
private:
    using Container = std::list<QueryStatus>;
    ProcessList & parent;
    Container::iterator it;
public:
    ProcessListEntry(ProcessList & parent_, Container::iterator it_)
        : parent(parent_), it(it_) {}
    ~ProcessListEntry();
    QueryStatus * operator->() { return &*it; }
    const QueryStatus * operator->() const { return &*it; }
    QueryStatus & get() { return *it; }
    const QueryStatus & get() const { return *it; }
};
class ProcessListBase
{
    mutable std::mutex mutex;
protected:
    using Lock = std::unique_lock<std::mutex>;
    struct LockAndBlocker
    {
        Lock lock;
        OvercommitTrackerBlockerInThread blocker;
    };
    
    
    LockAndBlocker safeLock() const noexcept { return { std::unique_lock{mutex}, {} }; }
    Lock unsafeLock() const noexcept { return std::unique_lock{mutex}; }
};
class ProcessList : public ProcessListBase