Поток Локальное хранилище повреждено после исключения нарушения прав доступа

У меня есть некоторые данные, хранящиеся в локальном хранилище потока. В основном у меня есть для каждого потока какие-то атрибуты, хранящиеся в TLS. В TLS мы помещаем экземпляр объекта пользовательского класса CMyAttributes *.

Это владелец подсчитанных атрибутов

В качестве примера:

CMyAttributes* CMyAttributes::GetInstance()
{
ThreadStorage& tls = GetThreadLocalStorage();
CMyAttributes* pMyAttributes = reinterpret_cast<CMyAttributes*>(tls.Get());
if (pMyAttributes == nullptr)
{
pMyAttributes = new CMyAttributes();
pMyAttributes->AddRef();
tls.Set(pMyAttributes);
}
pMyAttributes->AddRef();
return pMyAttributes;
}

Переопределить AddRef и Release. Этот класс подсчитан. В релизе, когда объект уничтожается, мы очищаем TLS, вызывая tls.Set (nullptr).

Теперь проблема, с которой мы сталкиваемся, заключается в том, что при возникновении исключения нарушения доступа мы видим, что локальное хранилище потока повреждено. То есть, когда мы вызываем вызов GetInstance, мы видим, что TLS имеет значения мусора, и pMyAttributes не равен NULL, и Addref падает.

Мы не могли понять, что является причиной коррупции. Любые предложения по устранению подобных проблем.

0

Решение

Задача ещё не решена.

Другие решения


По вопросам рекламы [email protected]