Почему моя программа генерирует тупик LdrpLoaderLock с собственным потоком?

Я разрабатываю приложение на C ++, над которым работаю годами. Недавно мы добавили около 4-х процессорных тестовых машин в нашу тестовую лабораторию.

После этого мы обнаружили, что определенный тест под нагрузкой периодически приводит к LdrpLoaderLock тупик с нитью-владельцем больше не работает. Идентификатор потока-владельца обычно числовой, поскольку вероятный идентификатор потока экстраполируется из запущенных потоков, а структура памяти блокировки не выглядит поврежденной.

У меня нет этой проблемы в отладчике. Я просто могу посмотреть на это после того, как это произойдет. Я начал регистрировать все потоки, которые я создаю, и я не вижу там проблемного идентификатора. Это может не иметь смысла, хотя, возможно, регистрация не будет работать после возникновения тупика. Я думаю, что мне нужен способ отслеживать создание потоков и точки входа, чтобы я мог выяснить, какой поток это делает. Любая помощь приветствуется.

От ветра

0: 000>! Замки
CritSec ntdll! LdrpLoaderLock + 0 при 775d20c0
WaiterWoken Нет
LockCount 5
RecursionCount 2
OwningThread f38
EntryCount 0
ContentionCount 5
*** Заблокировано

Отсканировано 805 критических разделов

0: 000>! Темы
Индекс TID
0 00000ab8
1 000008cc
2 00000e68
3 0000134c
4 00000c44
5 000011a0
6 00000f18
7 00000908
8 00001084
9 00000f08
10 00001098
11 00001010
12 00000d40
13 0000135c

Общее количество виртуальных машин, потребляемых стеками потоков 0x031cf000

0: 000> d 775d20c0
775d20c0 60 43 5d 77 ea ff ff ff ff-02 00 00 00 38 0f 00 00 `C] w ........ 8 ...
775d20d0 ac 04 00 00 00 00 00 00-40 43 5d 77 ff ff ff ff ff ........ @ C] w ....
775d20e0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 02 ................
775d20f0 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
775d2100 00 49 5d 77 ff ff ff ff-00 00 00 00 00 00 00 00 .I] w ............
775d2110 00 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 ................
775d2120 20 49 5d 77 ff ff ff ff-00 00 00 00 00 00 00 00 I] w ............
775d2130 00 00 00 00 a0 0f 00 00-00 00 00 00 00 00 00 00 ................

3

Решение

Раймонд Чен был прав. Я звоню стороннему ком-компоненту. Он создавал поток, а затем вызывал TerminateThread в деструкторе. К счастью, у меня была исходная лицензия, или я бы навсегда потерял сознание. комментирование вызова TerminateThread в этом деструкторе и перестройка исправили мою проблему. Теперь, чтобы сторонние поставщики исправили свой код.

0

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

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector