And more information. The actual reason is that m_trackCache is qCache with maximum size TRACK_CACHE_SIZE, and qCache will automatically remove old objects from cache if it is full.
Meaning. m_trackCache.insert() must never be called inside a mutex, as we do in getTrack, otherwise qCache automatic cleanup may call deleteTrack and deadlocks.
And more information. The actual reason is that m_trackCache is qCache with maximum size TRACK_CACHE_SIZE, and qCache will automatically remove old objects from cache if it is full.
Meaning. m_trackCache. insert( ) must never be called inside a mutex, as we do in getTrack, otherwise qCache automatic cleanup may call deleteTrack and deadlocks.