НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.2.3 >> [I128-2469] FileLock оставляет TTL-блокировку активной после unlock📄 Скачать в DOCX
| Тип | Версия | Статус | Приоритет | Исполнитель |
|---|---|---|---|---|
| ⚙️ Исправление ошибок | 2026.2.3 | 🔘 Завершено |
Средний | Ilya Mikhaylenko |
Компоненты: ИРБИС 128. Модуль FileLock - Подсистема блокировок
Завершено: 29.06.2026 13:50
1. Проблема
Если блокировка создавалась с TTL через lock($name, $fileold) или waitlock($name, $fileold), файл блокировки получал mtime в будущем. При вызове unlock() снимался только flock, но mtime оставался будущим. Следующий процесс мог видеть такой файл как все еще зарезервированный и ждать до истечения TTL, хотя предыдущий процесс уже явно освободил блокировку.
1. Причина
FileLock::unlock() не сбрасывал время файла блокировки перед освобождением дескриптора.
1. Исправление
Перед flock(..., LOCK_UN) и fclose() для существующего файла блокировки выполняется touch($fn, time()), чтобы убрать отложенную TTL-резервацию при явном unlock.
1. Документация
Изменение документации не требуется: исправляется внутренняя логика подсистемы блокировок без изменения пользовательского сценария.