[I128-2471] Queue: рабочий поток не освобождает блокировку при штатном завершении


НАЧАЛО >> Оглавление >> Общее описание >> История изменений >> Что нового в проекте I128 >> Версия 2026.2.3 >> [I128-2471] Queue: рабочий поток не освобождает блокировку при штатном завершении📄 Скачать в DOCX


Тип Версия Статус Приоритет Исполнитель
⚙️ Исправление ошибок 2026.2.3 🔘 Завершено Средний Ilya Mikhaylenko

Компоненты: ИРБИС 128. Модуль Queue - Очередь задач

Завершено: 29.06.2026 13:51

Проблема: рабочий поток очереди Queue/ProcessThread при штатном завершении удалял состояние QueueThreadState из кеша, но не освобождал файловую блокировку QueueProcessThread. Из-за этого после завершения потока слот мог оставаться занятым до истечения TTL блокировки, а диспетчер временно не мог переиспользовать этот worker.

Причина: в штатных ветках выхода из ProcessThread отсутствовал вызов FileLock->unlock() для блокировки самого потока. Разблокировались задачи, но не блокировка QueueProcessThread_.

Исправление: добавлен локальный метод UnlockThread(), который освобождает QueueProcessThread_. Метод вызывается в двух штатных завершениях потока: когда новых задач нет, и когда поток завершил цикл после обработки задач.