プロジェクト

全般

プロフィール

バグ #4392

RingBufferのバッファフル時に待機する処理

n-miyamoto6年以上前に追加. 5年以上前に更新.

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

100%

予定工数:

説明

threading.Conditionのwait関数はPython 3.2以前と以降で動作が違う。

Python 3.2以降ではタイムアウトした場合にFalseを返し、それ以外ではTrueを返すが、Python 2.7等では常にNoneを返す。
このためPython 2系と3系で場合分けをする。

関係しているリビジョン

リビジョン 899 (差分)
miyamoto6年以上前に追加

[compat, bugfix, ->RELENG_1_2] bug fix. refs #4392

履歴

#1 n-miyamoto6年以上前に更新

  • ステータス新規 から 解決 に変更
  • 対象バージョンRELENG_1_2 にセット
  • 進捗率0 から 100 に変更

以下のようにPython3の場合はwait関数の戻り値で判定し、Python2の場合はfull関数でバッファフルかを確認するように変更した。

          if sec != 0 or nsec != 0:
            wait_time = sec + (nsec/1000000000.0)
          else:
            wait_time = None
          ret = self._full_cond.wait(wait_time)
          if sys.version_info[0] == 3:
            if not ret:
              self._full_cond.release()
              return OpenRTM_aist.BufferStatus.TIMEOUT
          else:
            if self.full():
              self._full_cond.release()
              return OpenRTM_aist.BufferStatus.TIMEOUT

#2 n-miyamoto5年以上前に更新

  • ステータス解決 から 終了 に変更

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