Bug 10364

Summary: Блокирование таймера созданного timer_create()
Product: Branch 3.0 Reporter: Roman Savochenko <rom_as>
Component: glibcAssignee: Dmitry V. Levin <ldv>
Status: CLOSED FIXED QA Contact: at <at>
Severity: critical    
Priority: P2    
Version: 3.0   
Hardware: all   
OS: Linux   
Attachments:
Description Flags
Программка тестирования на блокировку прерываний none

Description Roman Savochenko 2006-12-04 11:03:10 MSK
Дистрибутив: ALTLinux 3.0
GLibC: glibc-2.3.5-alt5
Описание проблемы:
Проблема замечена при создании таймера функцией timer_create(), с методом
уведомления SIGEV_THREAD. Таймер создаётся периодическим, вызывающим создание
нового потока. На первый взгляд таймер работает нормально, т.е. потоки создаются
выполняются и завершаются. Но, если вызванный таймером поток выполняется
продолжительное время, то становится видимым блокирование таймера. Причем,
блокируется не только таймер вызвавший продолжительное время выполняющийся
поток, но и все таймеры созданные функцией timer_create()! Эта проблема
практически сводит на нет возможность использования POSIX таймеров, а учитывая и
неоднозначность в работе интервального таймера setitimer() на различных моделях
потоков, то и таймеров вообще!
На дистрибутиве SuSE Linux 10.1 с NPTL 2.4 в GlibC POSIX таймера работают
нормально и не приводят к взаимному блокированию.
Comment 1 Roman Savochenko 2006-12-05 11:41:13 MSK
Created attachment 1697 [details]
Программка тестирования на блокировку прерываний

Написал программку для наглядной демонстрации и выявления данной проблемы. При
запуске её на ALTLinux3.0 и SuSe 10.1 четко видно блокирование быстрого таймера
в ALTLinux3.0 на момент исполнения потока медленного таймера.
//========== ALTLinux3.0 ==============
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Begin the slow and the long execution task call.
End the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Begin the slow and the long execution task call.
End the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
//=======================================
//============= SuSE 10.1 ===============
Fast task call.
Fast task call.
Fast task call.
Begin the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
End the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Begin the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
Fast task call.
End the slow and the long execution task call.
Fast task call.
Fast task call.
Fast task call.
//=======================================
Comment 2 Roman Savochenko 2006-12-05 12:06:08 MSK
Эта проблема, кстате, актуальна и для ALTLinux 2.4.
Comment 3 Roman Savochenko 2007-04-02 18:27:59 MSD
Проблема не актуальна для glibc-2.5-alt4 из Сизифа.
Comment 4 Roman Savochenko 2007-05-23 18:24:15 MSD
Закрываю как не актуальный для 4.0