Исходный код
Используется версия 1.7.0, т.к. в более поздних обнаружились проблемы.
Версия | Проблема |
1.8.0 | Утечка памяти |
r1928 | Утечка памяти |
1.10.0 | Утечка памяти (исправлено в копии репозитория) |
- Заметки
- Утечка памяти появляется только в тестовом проекте Alicorn (в отдельном проекте воспроизвести не удалось) при вызове функции
testing::InitGoogleTest(&argc, argv);
Утечка памяти
В версии 1.8.0+ появились утечки памяти, из-за чего пришлось создать зеркало репозитория, в которое внесены следующие правки:
- В файле gtest-port.h закомментирован деструктор класса ThreadLocal.
- В файле gtest-port.cc в функции GetThreadLocalsMapLocked() заменено создание объекта на
static auto map = ::std::make_shared<ThreadIdToThreadLocals>();
return map.get();
- В файле gtest-port.cc в функции StartWatcherThreadFor() заменено:
static ::std::map<DWORD, ::std::shared_ptr<ThreadIdAndHandle>> ThreadHandles;
ThreadHandles[thread_id] =
::std::make_shared<ThreadIdAndHandle>(thread_id, thread);
HANDLE watcher_thread = ::CreateThread(
nullptr,
0,
&ThreadLocalRegistryImpl::WatcherThreadFunc,
ThreadHandles[thread_id].get(),
CREATE_SUSPENDED, &watcher_thread_id);