[I128-2469] FileLock оставляет TTL-блокировку активной после unlock


НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте 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. Документация

Изменение документации не требуется: исправляется внутренняя логика подсистемы блокировок без изменения пользовательского сценария.