| Предыдущий | Следующий |
| STATUS_THREADPOOL_RELEASE_SEMAPHORE_ON_COMPLETION_FAILED | STATUS_THREADPOOL_FREE_LIBRARY_ON_COMPLETION_FAILED |
STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED
Что означает STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED
STATUS_THREADPOOL_RELEASE_MUTEX_ON_COMPLETION_FAILED — пул потоков не смог освободить mutex после обратного вызова.
Что проверить
Зафиксируйте поток и вызов, на котором появился код, а также состояние потока до и после операции.
- Проверьте срок жизни контекста обратного вызова, порядок завершения потока и наличие ожидающих APC или уведомлений, если они участвуют в сценарии.
- При гонке или зависании снимите стеки участвующих потоков: обычный повтор часто только меняет расписание и скрывает причину.
Исходная формулировка
A deferred mutex release failed when the callback returned.
ReleaseMutexWhenCallbackReturns defers releasing a mutex until the callback is leaving the worker thread. A failure usually points to invalid handle lifetime or ownership mismatch. A mutex can only be released by its owning thread, so moving ownership or attempting an additional release breaks the contract.
Do not transfer mutex ownership to a different thread while a deferred release is registered.
Avoid combining direct ReleaseMutex calls with callback-return release for the same acquisition.
This status should trigger an audit of the entire lock path. The shared state may still be protected by a mutex that was never released, or another cleanup path may have released it prematurely. Continuing as though finalization succeeded can turn the original bug into a later deadlock.
Технические ссылки
- Microsoft Open Specifications: NTSTATUS values
- Microsoft: ReleaseMutexWhenCallbackReturns
- Microsoft: threadpoolapiset.h functions
- Microsoft: pooled threads and callback environments
Нужно найти другой код? Найти другой код состояния или ошибки.