操作
バグ #2609
完了coil condition timeout の不具合修正
開始日:
2013/03/18
期日:
進捗率:
100%
予定工数:
説明
KEK千代さんからの指摘。添付スライド参照。
wait()に与えるタイムアウト時間は絶対時間ではなくてはならないが、相対時間を与えている。
ファイル
n-ando さんが12年以上前に更新
--- OpenRTM-aist-r1971/src/lib/coil/posix/coil/Condition.h.orig 2010-06-24 09:22:51.000000000 +0900
+++ OpenRTM-aist-r1971/src/lib/coil/posix/coil/Condition.h 2013-02-22 09:26:12.108141163 +0900
@@ -20,6 +20,7 @@
#ifndef COIL_CONDITION_H
#define COIL_CONDITION_H
+#include <sys/time.h>
#include <pthread.h>
#include <algorithm>
#include <ctime>
@@ -177,9 +178,16 @@
*/
bool wait(long second, long nano_second = 0)
{
+ struct timeval tv;
timespec abstime;
- abstime.tv_sec = std::time(0) + second;
- abstime.tv_nsec = nano_second;
+
+ ::gettimeofday(&tv, NULL);
+ abstime.tv_sec = tv.tv_sec + second;
+ abstime.tv_nsec = tv.tv_usec*1000 + nano_second;
+ if (abstime.tv_nsec >= 1000000000) {
+ abstime.tv_nsec -= 1000000000;
+ abstime.tv_sec ++;
+ }
return 0 == ::pthread_cond_timedwait(&m_cond, &m_mutex.mutex_, &abstime);
}
操作