Bug 10364 - Блокирование таймера созданного timer_create()
Summary: Блокирование таймера созданного timer_create()
Status: CLOSED FIXED
Alias: None
Product: Branch 3.0
Classification: Archive
Component: glibc (show other bugs)
Version: 3.0
Hardware: all Linux
: P2 critical
Assignee: Dmitry V. Levin
QA Contact: at@altlinux.org
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2006-12-04 11:03 MSK by Roman Savochenko
Modified: 2007-05-23 18:24 MSD (History)
0 users

See Also:


Attachments
Программка тестирования на блокировку прерываний (1.51 KB, text/plain)
2006-12-05 11:41 MSK, Roman Savochenko
no flags Details

Note You need to log in before you can comment on or make changes to this bug.
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