OpenRTM / OpenRTM-aist

OpenRTM-aist: RT-Middleware and OMG RTC implementation in C++ implemented by AIST
https://openrtm.org/
Other
19 stars 12 forks source link

Singleton な GlobalFactory の意図は何か #610

Closed r-kurose closed 3 years ago

r-kurose commented 5 years ago

a05446c1821d2af0a454f91c0e9bbf5710822267 の変更に関しての質問です。 1. すでに Singleton になっているはずの GlobalFactory をさらに Singleton にした意図は何か。 2. OutPortConsumer.h など一部が同様に対応されていないのはなぜか。

r-kurose commented 5 years ago

返事がないが #681 で修正はした。意図と合っているかの確認は必要。

Nobu19800 commented 4 years ago

GlobalFactoryをさらにSingletonにするかどうかで動作が違う場合があります。

linRTC.soと外部の共有ライブラリでGlobalFactoryを共有する場合に、以下の場合はlibRTC.soと外部の共有ライブラリで別のGlobalFactoryを生成しているらしく共有できていません。このため外部の共有ライブラリ側でファクトリを追加しても、libRTC.so側では追加されていないという事が起こります。

EXTERN template class coil::GlobalFactory < XXX >;

Singletonにすると何故かGlobalFactoryが共有できるため正常に動作します。

EXTERN template class coil::Singleton<coil::GlobalFactory < XXX > >;

libRTC.soのどこかでinstance関数を呼ぶなどした場合も正常に動作します。

coil::GlobalFactory < XXX >::instance();