[openrtm-users 00800] RefCount

4 posts / 0 new
Last post
root
Offline
Last seen: 5 hours 53 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00800] RefCount

OpenRTM-aist開発者の皆様

Configuration_impl::getObjRef();
で、RefCountをインクリメントしていないのですが、
これは意図したものでしょうか。
(var型のreturnはptr型をそのまま返すだけ
のようです。omniORB4/templatedecls.h参照。)

基本ルールからすると、duplicateしたほうが安全では、
と考えます。

静岡大 清水

Undefined
root
Offline
Last seen: 5 hours 53 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00802] RefCount

清水様

安藤です

ご指摘の通りです。
CORBAの通常のルールでは、オブジェクトリファレンスを
return時には内部でリファレンスの所有権を放棄(例えばduplicate()し)、
外でreleaseするのが正しいです。

> OpenRTM-aist開発者の皆様
>
> Configuration_impl::getObjRef();
> で、RefCountをインクリメントしていないのですが、
> これは意図したものでしょうか。
> (var型のreturnはptr型をそのまま返すだけ
> のようです。omniORB4/templatedecls.h参照。)
>
> 基本ルールからすると、duplicateしたほうが安全では、
> と考えます。

この辺は、CORBAインターフェースとそうでないインターフェースの
オブジェクトリファレンスの扱いをそれぞれどう扱うかの問題で、
CORBAインターフェースの方は選択の余地はありませんが、
それ以外のインターフェースでは、以前は結構適当に扱ってました
ので、現在それらを直す作業を行っています。

ちなみに、getObjRef()が参照をduplicateしないのは、
rtobj.getObjRef()->get_component_profile() のように ->演算子を
ダイレクトに使えたり便利なのでこのようにしてました。

root
Offline
Last seen: 5 hours 53 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00806] RefCount

安藤様

> この辺は、CORBAインターフェースとそうでないインターフ
ェースの
> オブジェクトリファレンスの扱いをそれぞれどう扱うかの問
題で、
> CORBAインターフェースの方は選択の余地はありませんが、
> それ以外のインターフェースでは、以前は結構適当に扱って
ました
> ので、現在それらを直す作業を行っています。
>
> ちなみに、getObjRef()が参照をduplicateしないのは、
> rtobj.getObjRef()->get_component_profile() のように
> ->演算子を
> ダイレクトに使えたり便利なのでこのようにしてました。

なるほど。これはC++だけのメソッドなので、
ユーザが適正に使うというように決めておけば
よさそうですね。
ただ、取得したrefをvar型に入れたい人もいると
思うので、
getObjVar();
または、
getObjRef(bool use_var_type = false);
のようなインタフェースがあると
よいかもしれません。
要は、var格納用とptr直接呼び出し用
があると使う側はわかりやすいし便利かな、
と感じます。どうでしょうか。

清水

root
Offline
Last seen: 5 hours 53 min ago
Joined: 2009-06-23 14:31
[openrtm-users 00817] RefCount

清水様

安藤です

>> ちなみに、getObjRef()が参照をduplicateしないのは、
>> rtobj.getObjRef()->get_component_profile() のように
>> ->演算子を
>> ダイレクトに使えたり便利なのでこのようにしてました。
>
> なるほど。これはC++だけのメソッドなので、
> ユーザが適正に使うというように決めておけば
> よさそうですね。
> ただ、取得したrefをvar型に入れたい人もいると
> 思うので、
> getObjVar();
> または、
> getObjRef(bool use_var_type = false);
> のようなインタフェースがあると
> よいかもしれません。
> 要は、var格納用とptr直接呼び出し用
> があると使う側はわかりやすいし便利かな、
> と感じます。どうでしょうか。

すみません。勘違いしてました。
rtobj.getObjeRef()->get_component_profile()

rtobj.get_component_profile()
で呼べますね。
あまり必要なかったかもしれません。

ただ、Manager::getORB()やgetPOA()では、var格納用とptr直接呼び出し用
の2種類があると便利ですね。そっちと勘違いしておりました。

でも、Servantのactivateやdeactivateを自動でやってくれる
便利ServantBaseを実装するのは役に立ちそうです。
考えてみます。

Log in or register to post comments

Download

latest Releases : 2.0.0-RELESE

2.0.0-RELESE Download page

Number of Projects

Choreonoid

Motion editor/Dynamics simulator

OpenHRP3

Dynamics simulator

OpenRTP

Integrated Development Platform

AIST RTC collection

RT-Components collection by AIST

TORK

Tokyo Opensource Robotics Association

DAQ-Middleware

Middleware for DAQ (Data Aquisition) by KEK