プロジェクト

全般

プロフィール

バグ #2609

coil condition timeout の不具合修正

n-ando約11年前に追加. 約11年前に更新.

ステータス:
終了
優先度:
通常
担当者:
対象バージョン:
-
開始日:
2013/03/18
期日:
進捗率:

100%

予定工数:

説明

KEK千代さんからの指摘。添付スライド参照。

wait()に与えるタイムアウト時間は絶対時間ではなくてはならないが、相対時間を与えている。

daqmw-core.2013-03-18.pptx (523 KB) daqmw-core.2013-03-18.pptx n-ando, 2013/03/18 17:20

履歴

#1 n-ando約11年前に更新

--- 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);
     }

#2 n-ando約11年前に更新

  • ステータス新規 から 終了 に変更
  • 進捗率0 から 100 に変更

#2637 にて修正済み。

他の形式にエクスポート: Atom PDF