プロジェクト

全般

プロフィール

バグ #2561

バッファやコネクタまわりに関しての改善・検討要望

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

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

100%

予定工数:

説明

静岡大の清水です。

バッファやコネクタまわりに関しての改善・検討要望です。
過日のSI2012で発表した、共有メモリベースの
データ通信機能を実装する際に問題となった点です。
ご検討頂ければ幸いです。

【問題点】
現行のコネクタの実装(InPortPushConnectorを例とします)では、
以下の手順で初期化(コンストラクタ内で)がされています。

(1) バッファ生成
(2) プロバイダの初期化(InPortProvider::init()のコール)

一般に、プロバイダ(コンシューマも)は特定のバッファとの組み合わせでしか
動作しない場合も考えられると思います。
すなわち、プロバイダがどのバッファを生成するかを制御できる必要があります。

どのバッファを生成するかは、ConnectorProfileにbuffer_typeを設定することで
制御できますが、もしユーザが間違ったbuffer_typeを指定した場合、
あるいは何も指定しなかった場合は、プロバイダに適合したバッファが生成されません。

【対応策】
この問題は、バッファの生成とプロバイダの初期化の順序を入れ替えることで
回避できます。私が実際に変更したコードは以下です。

・オリジナル(一部のみ抜粋)
InPortPushConnector(ConnectorInfo info, InPortProvider *provider) {
m_buffer = createBuffer(info);
m_buffer->init(info.properties.getNode("buffer"));
m_provider->init(info.properties);
m_provider->setBuffer(m_buffer);
m_provider->setListener(info, &m_listeners);
}

・変更後
InPortPushConnector(ConnectorInfo info, InPortProvider *provider) {
m_provider->init(info.properties); //<= バッファ生成前にプロバイダのinit()をする
m_buffer = createBuffer(info);
m_buffer->init(info.properties.getNode("buffer"));
m_provider->setBuffer(m_buffer);
m_provider->setListener(info, &m_listeners);
}

以上のように変更し、自作プロバイダのinit()内でbuffer_typeプロパティを
追加(または上書き)すれば、プロバイダがバッファの種類を完全に制御できます。

ところで、プロバイダのinit()の引数がconst指定になっていないのは、
プロバイダがConnectorProfileの情報(コピー)を書き変えても良いということだと、
私は判断しましたが、それで問題ないですよね。
もし書き換えを許可しないなら、const指定とする必要があります。

以上、よろしくご検討をお願いいたします。

履歴

#1 ga約11年前に更新

  • ステータス新規 から 解決 に変更
  • 担当者ga にセット
  • 進捗率0 から 100 に変更

PushConnector,PullConnectorに関してまして,provider,consumerのinit()の呼び出し順番を変更しました.
また,provider,consumerのinit()にて指定されたバッファが使用されることも確認いたしました.(r704)

#2 n-andoほぼ11年前に更新

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

ありがとうございました。

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