Я пишу очень интенсивное приложение, зависающее при выходе.
Я проследил системные единицы и нашел место, где программа входит в бесконечный цикл. Он находится в строке SysUtils 19868 → DoneMonitorSupport → CleanEventList:
repeat until InterlockedCompareExchange(EventCache[I].Lock, 1, 0) = 0;
Я искал решение в Интернете и нашел пару отчетов по контролю качества:
К сожалению, это не похоже на мою ситуацию, поскольку я не использую ни TThreadList, ни TMonitor.
Я уверен, что все мои потоки закончены и были уничтожены, так как все они наследуются от базового потока, который содержит счетчик create/destroy.
Кто-нибудь сталкивался с подобным поведением раньше? Знаете ли вы о каких-либо стратегиях для обнаружения того, где может быть основная причина?