Что означает код HRESULT 0x80030100 (STG_E_INUSE)?

 
Предыдущий Следующий
STG_E_INVALIDFLAG STG_E_NOTCURRENT

STG_E_INUSE

Занятость — это проблема состояния

STG_E_INUSE означает, что объект хранилища в данный момент занят. В отличие от STG_E_SHAREVIOLATION, ошибка не обязательно указывает на конфликтующий режим открытия файла, а в отличие от STG_E_LOCKVIOLATION не обязательно раскрывает конкретного владельца блокировки. Это сигнал о том, что запрошенная операция несовместима с текущим состоянием объекта или уже выполняющейся операцией.

В рабочем процессе Structured Storage состояние может удерживаться копированием потока, последовательностью фиксации, преобразователем, асинхронным компонентом или операцией уровня приложения, которая ещё не завершилась. Рассматривайте HRESULT как указание разобраться с жизненным циклом, а не как доказательство повреждения физического документа.

Полезные шаги исследования

  • Регистрируйте точный вызов API и сведения о том, была ли уже активна операция чтения, копирования, фиксации или изменения того же корневого хранилища.
  • Сериализуйте изменяющие операции для каждого документа и задайте чёткое правило завершения или отмены рабочих задач.
  • Освобождайте ссылки только после подтверждения остановки ожидающей работы; преждевременное уничтожение может вызвать ошибку другого типа.
  • Если повтор допустим, используйте ограниченное число попыток с повторной проверкой состояния вместо плотного цикла.

Ссылки


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