[openrtm-users 00803] Re: SdoConfiguration のデストラクタ

Ando Noriaki n-ando @ aist.go.jp
2009年 5月 29日 (金) 09:09:24 JST


安藤です

> OpenRTM-aist開発者の皆様
>
> SdoConfigurationのデストラクタ、
> SDOPackage::~Configuration_impl();
> の実装がまずいと思います。
>
> このクラスはCORBAサーバント実装なので、
> コンストラクタで、
> this->_this();
> とimplicit activationしています。
> したがって、デストラクタでdeactivation
> をしなければ安全でないと思います。
> このクラスをnewしてそのままdeleteされる
> 可能性を考えて実装すべきと考えます。

SdoConfigurationのdeactivateはRTObjectのshutdownの中で行っています。
SdoConfigurationの寿命はRTObjectの寿命以下なので、
とりあえずこれでも問題ないと思います。
コンストラクタの中で、activateしているので、デストラクタの中で
deactivateするのが筋かとは思いますが。

> よって、以下のようなデストラクタの実装が
> 必要ではないでしょうか。
> ----------
> try{
>     PortableServer::POA_var poa = this->_default_POA();
>     PortableServer::ObjectId* id =
> poa->servant_to_id(this);
>     poa->deactivate_object(*id);
>   }catch(...){
>   }
> ----------
>
> P.S. ところで、このクラスではdefaultPOAを使っていますが
>> ManagerのPOAと一致させなくても大丈夫なのでしょうか?
> 現在のところは、ManagerのPOAもdefaultPOAなのでよいですが
>> もし将来的にManagerのPOAがdefaultPOAでなくなったときに、
> 何らかの問題が起きるのでは?と感じます。

そうですね、RTObjectのshutdown内でのdeactivateでManagerから
もらったPOAでdeactivateをしているのでこれは問題になるかもしれません。

ところで、defaultでないPOAを使いたい場面とか、なにかありますか。
あるようなら、独自のServantBaseを実装してもよいのですが。。。

-- 
安藤慶昭@独立行政法人産業技術総合研究所 研究員
                  知能システム研究部門 統合知能研究グループ
                  〒305-8568 茨城県つくば市梅園1-1-1 中央第2
                  TEL: 029-861-5981 FAX: 029-862-6631
                  n-ando @ aist.go.jp, n-ando @ ieee.org



openrtm-users メーリングリストの案内