Что означает код HRESULT 0x80098040 (WINBIO_E_DEADLOCK_DETECTED)?

 
Предыдущий Следующий
WINBIO_E_SESSION_HANDLE_CLOSED WINBIO_E_NO_PREBOOT_IDENTITY

WINBIO_E_DEADLOCK_DETECTED

WINBIO_E_DEADLOCK_DETECTED — результат защиты от ошибок параллелизма. Сеансы WBF могут доставлять асинхронные обратные вызовы, пока приложение одновременно отменяет операции, ожидает их, закрывает сеансы или управляет мониторами событий; вызов блокирующего или изменяющего состояние API из неподходящего обратного вызова или контекста блокировки может создать цикл, в который платформа отказывается входить.

Фиксируйте контекст вызова, а не только имя API

  • Запишите идентификатор потока и признак того, что вызов выполняется внутри обратного вызова завершения или события WinBio.
  • Запишите мьютексы приложения, удерживаемые во время вызовов WinBio, и наличие другого потока, ожидающего завершения того же сеанса.
  • Переносите длительную или блокирующую работу из обратных вызовов событий; обратные вызовы монитора событий доставляются последовательно.

Microsoft предупреждает, что обратные вызовы событий не должны выполнять длительную работу, и документирует WinBioWait как блокирующую операцию ожидания незавершённой работы сеанса. При появлении этого HRESULT постройте временную последовательность блокировок и сеанса. Повтор на том же стеке обратного вызова может воспроизвести тот же цикл зависимостей и менее полезен, чем поиск межпоточного владения.

WinBioRegisterEventMonitor · WinBioWait


Нужно найти другой код? Найти другой код состояния или ошибки.