Помогите найти утечку ресурсов
От: QC  
Дата: 23.09.06 16:59
Оценка:
Добрый день, нужна помощь в устранении следующей проблемы.

ОС Linux Fedora 2.6

Программа читает файловый дескриптор /dev/serial/chan0, обрабатывает полученные данные
и пишет "ответы" в этот дескриптор. Все это выполняется в бесконечном цикле while (см код).

Программа работает нормально примерно несколько (по разному) тысяч циклов while, после чего ни с того ни с сего
в этом цикле появляются ощутимые задержки длительностью несколько сот микросекунд. Есть подозрение, что
"забивается" стек CPU или еще какие-то системные ресурсы. Программа может работать бесконечно, но из-за
задержек теряется часть данных принимаемых из файлового дескриптора.

CPU LOAD < 1%, память вроде бы не растет, valgrind утечек не находит. На работе других программ задержки
не сказываются. Абсолютно точно известно, что данные извне в файловый дескриптор поступают без задержек.

Программа использует pthreads но ВСЕ они создаются PTHREAD_CREATE_DETACHED.

Причина видимо в THREAD_FUNC, но как дочерняя нить может КАК-ЛИБО влиять на родительский поток ?

Буду благодарен за подсказку где искать проблему.



struct MESSAGE
{
 ssize_t    LEN; // NUMBER OF BYTES IN DATA
 u_char     DATA[1000];

 ~MESSAGE(); // DESTRUCTOR
};

void main()
{
 ssize_t nrx=0; u_char buffer[50]={0};

 int chan = open("/dev/serial/chan0", O_RDWR);

 MESSAGE MSG_BUF;

 if (chan > 0) 
 {
  while (true)
  {
   nrx = read (chan, buffer, 50);

   memcpy (MSG_BUF.DATA, buffer, nrx); MSG_BUF.LEN=nrx;

   START_PROC(&MSG_BUF);  ... ЭТА ПРОЦЕДУРА СОЗДАЕТ ЗАДЕРЖКИ ???!!! ... 
 
  }
 } 
}

void START_PROC(void *arg)
{

 pthread_attr_t attr_PRC; pthread_t tid_PRC; sched_param param_PRC;
 pthread_attr_init(&attr_PRC); param_PRC.__sched_priority=99; 
 pthread_attr_setschedparam  (&attr_PRC, &param_PRC);
 pthread_attr_setschedpolicy (&attr_PRC, SCHED_RR);
 pthread_attr_setdetachstate (&attr_PRC, PTHREAD_CREATE_DETACHED);

 pthread_create (&tid_PRC, &attr_PRC, THREAD_FUNC, arg); 
}

void *THREAD_FUNC(void *arg)
{
 ... PROCESS DATA AND WRITE RESPONSE ...
}

Добавлено форматирование — Кодт


27.09.06 16:40: Перенесено из 'C/C++'
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.