The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"pthread_cond_timedwait возвращает EINVAL"
Вариант для распечатки  
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"pthread_cond_timedwait возвращает EINVAL"  
Сообщение от devcoder email(??) on 09-Авг-07, 15:07 
Очень редко зацикливается программа на ожидании состояния.
Судя по всему, pthread_cond_timedwait ругается (EINVAL) на один из трёх параметров.
Вот что кажет отладчик.
Время ts - вроде нормальное, остаются два:
1) кондишн переменная notempty
и
2) мьютекс cond_lock
Что с ними может быть не так?

      if (0 != pthread_mutex_lock(&remote_host->cond_lock))
         syslog(LOG_ERR, "webcam httpd for %s pthread_mutex_lock(cond_lock) failed -> %m",  remote_host->ip_str);

      err = 0;
      if (-1 == gettimeofday(&wc_now, NULL))
         LOGPERR("gettimeofday()");
646           ts.tv_sec = wc_now.tv_sec;
647           ts.tv_nsec = wc_now.tv_usec * 1000 + 10000 /* 10 ms */ ;
648           while ((remote_host->ja_wr_pos == remote_host->ja_rd_pos) &&  (err != ETIMEDOUT))
649           {
650              err =  pthread_cond_timedwait(&remote_host->notempty, &remote_host->cond_lock, &ts);
651           }
652
(gdb) next
650              err =  pthread_cond_timedwait(&remote_host->notempty, &remote_host->cond_lock, &ts);
(gdb) next
648           while ((remote_host->ja_wr_pos == remote_host->ja_rd_pos) &&  (err != ETIMEDOUT))
(gdb) print remote_host->ja_wr_pos
$2 = 1
(gdb) print remote_host->ja_rd_pos
$3 = 1
(gdb) print err
$4 = 22
(gdb) print remote_host->notempty
$5 = {__data = {__lock = 0, __futex = 82530, __total_seq = 41265, __wakeup_seq = 41265, __woken_seq = 41265, __mutex = 0xb5d15b58,
    __nwaiters = 0, __broadcast_seq = 0},
  __size = "\000\000\000\000bB\001\0001�\000\000\000\000\000\0001�\000\000\000\000\000\0001�\000\000\000\000\000\000X[ѵ", '\0' <repeats 11 times>, __align = 354463650938880}
(gdb) print remote_host->cond_lock
$6 = {__data = {__lock = 2, __count = 0, __owner = 14221, __kind = 0, __nusers = 1, __spins = 0},
  __size = "\002\000\000\000\000\000\000\000\2157\000\000\000\000\000\000\001\000\000\000\000\000\000", __align = 2}
(gdb) print ts
$7 = {tv_sec = 1186654727, tv_nsec = 1000007000}

Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

 Оглавление

Сообщения по теме [Сортировка по времени, UBB]


1. "pthread_cond_timedwait возвращает EINVAL"  
Сообщение от devcoder email(??) on 09-Авг-07, 16:51 
Снято,
> tv_nsec = 1000007000

это не есть нормально :-)


Высказать мнение | Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Оцените тред (1=ужас, 5=супер)? [ 1 | 2 | 3 | 4 | 5 ] [Рекомендовать для помещения в FAQ]




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру