| Предыдущий | Следующий |
| ENOBUFS | ECANCELED |
EOWNERDEAD
Вызывающая сторона может владеть блокировкой, но состояние ещё нельзя считать надёжным
EOWNERDEAD необычен тем, что вызывающая сторона может захватить надёжный мьютекс и при этом получить ненулевой результат. Предыдущий владелец завершился, удерживая блокировку, поэтому новый владелец должен считать защищаемые данные потенциально несогласованными и определить, можно ли их восстановить.
Не возобновляйте нормальную работу немедленно. Сначала проверьте или восстановите данные, защищаемые мьютексом; только после успешного исправления реализация должна пометить состояние как согласованное посредством механизма восстановления надёжного мьютекса. Освобождение блокировки без завершения восстановления может перевести мьютекс в постоянно непригодное состояние ENOTRECOVERABLE.
Что должно обеспечить восстановление
- Какие изменения выполнялись при остановке предыдущего владельца и можно ли повторно воспроизвести журнал в памяти или на диске.
- Что до продолжения работы других потоков восстановлены все инварианты общей структуры, а не только слово блокировки.
- Что пути аварийного завершения и отмены оставляют достаточно данных, чтобы отличить сбой владельца от обычного освобождения блокировки.
Ссылки
- Apple XNU: определения errno в Darwin
- POSIX: поведение pthread_mutex_lock() для надёжных мьютексов
- POSIX: pthread_mutex_consistent()
Нужно найти другой код? Найти другой код состояния или ошибки.
