OpenSCADAWiki: Errors/Known Bugs/19122005 ...

Home | Index | Changes | Comments | Users | Registration | Login  Password:  
 
This is an old revision of Errors/KnownBugs/19122005 from 2006-01-03 17:43:29..

Подробное описание ошибки от 19.12.2005


Сформировалось подозрение про багу в работе интервального
таймера и сигналов в NPTL на ядрах >= 2.6.12.
Проблема в следующем:
- имеется задача в которой создаётся множество потоков;
- каждый поток создаёт собственный интервальный таймер с индивидуальным
периодом с помощью функций: setitimer() или timer_create();
- обработчик сигналов для всех это функция пустышка указанная с помощью:
signal();
- каждый поток циклически выполняет свой код с ожиданием сигнала после
этого с помощью функций: sigwait() или pause();
- на системах без NPTL и на системах с NPTL на ядрах 2.4 (ALTLinux2.4,
ASPLinux9) сигналы шлются потокам и они периодически выполняют свой код;
- на системах с NPTL и ядрами >= 2.6.12 (SuSE10_64, Mandriva2006,
FedoreCore4_64) сигналы шлются процессу, но не потокам, в результате
чего потоки стоят на ожидании сигнала;


Для примера написана тестовая программа которая воспроизводит эту проблему.
На системах без NPTL и на системах с NPTL на ядрах 2.4 (ALTLinux2.4,
ASPLinux9) результаты её работы такие:

ALTLinux2.4


//



На системах с NPTL и ядрами >= 2.6.12 (SuSE10_64, Mandriva2006,
FedoreCore4_64) результаты её работы такие:

SuSE 10 (64)


Из протокола выполнения программы на SuSE10 видно что:
- цикл потока один раз выполняется и стопорится на ожидании сигнала
функцией sigwait(&set, &sig);
- при этом сигналы идут, но на процесс что видно по сообщениям "Exit
from programm!" возникающих после функции sleep(30) с частотой 1 сек
путём прерывания функции sleep(30) сигналом.


Проблему выявлено на дистрибутивай:
- SuSE 10 (64)
- Mandriva 2006
- FedoreCore4 (64)
На всех этих дистрибутивах используется: kernel >=2.6.12, glibc 2.3.5,
gcc 4.0, NPTL


Не выявлено на дистрибутивах:
- ALM2.4
- ALC3.0
- ASPLinux 9


Похоже на проблему в особенности реализации интервального таймера на NPTL. В связи с которой становится невозможным получить интервалы в потоках для задач такого типа. В связи с этим, рассматривается вариант использования возможности таймера создавать поток по истечению времени.



 
There are no files on this page.[Display files/form]
There is no comment on this page. [Display comments/form]