[openrtm-users 02890] OS X においてマネージャ初期化時に固まる症状

6 posts / 0 new
Last post
nakaoka
Offline
Last seen: 4 years 11 months ago
Joined: 2011-07-25 18:26
[openrtm-users 02890] OS X においてマネージャ初期化時に固まる症状

産総研の中岡です。

度々すみません、Mac OS X (Lion) においてマネージャ初期化時に固まるという
不可解な症状に遭遇しましたので、報告させてください。

状況としては、Choreonoidにおいて起動時にRTC::Manager::init()を行なってお
り、ある条件下でこの関数が固まります。

固まる箇所をたどっていくと、

Manager::initNaming() -
NamingManager::registerNameServer()-
NamingManager::createNamingObj() -
NamingOnCorba::NamingOnCorba() -
coil::dest_to_endpoint()

ときて、ここから呼ばれる
coil::find_dest_ifname() と
coil::ifname_to_ipaddr() の関数です。

1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
108行と107行にある

wait(NULL)

でブロックしたまま帰ってきていません。

ある条件というのは、マネージャの初期化を行なっているプロセスから、
マネージャ初期化の前にネームサーバのコマンドを(別プロセスとして)起動し
ているということです。同じコマンドをあらかじめ他のプロセスから起動してあ
る場合は、問題なく動くのですが…。また、この症状が出るのはOS Xだけで、
WindowsやLinuxでは同じ事を行なっても問題なく動いています。

そして、OS Xでも上記の2つのwait(NULL)をどちらもコメントアウトすると、固
まらなくなり、その後も特に問題なく動いているように見えます。

ちなみにネームサーバのコマンドはomniNamesを参考に自前で実装した
Choreonoid付属のものです。WindowsやMacではネームサーバがデーモンとして自
動では起動しないのが普通だと思いますが、そのような場合でもChoreonoidを起
動するだけで簡単にシミュレーションを行えるように、この機能をつけています。

以上のような症状なのですが、今後のリリースで上記のwait(NULL)を除去しても
らうというのは問題ありますでしょうか?

Undefined
nakaoka
Offline
Last seen: 4 years 11 months ago
Joined: 2011-07-25 18:26
[openrtm-users 02891] OS X においてマネージャ初期化時に固まる症状

すみません、訂正です。

> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
> 108行と107行にある
>
> wait(NULL)

は、108行と167行でした。

(08/26/13 22:08), 中岡 慎一郎 wrote:
>
> 産総研の中岡です。
>
> 度々すみません、Mac OS X (Lion) においてマネージャ初期化時に固まるという
> 不可解な症状に遭遇しましたので、報告させてください。
>
> 状況としては、Choreonoidにおいて起動時にRTC::Manager::init()を行なってお
> り、ある条件下でこの関数が固まります。
>
> 固まる箇所をたどっていくと、
>
> Manager::initNaming() -
> NamingManager::registerNameServer()-
> NamingManager::createNamingObj() -
> NamingOnCorba::NamingOnCorba() -
> coil::dest_to_endpoint()
>
> ときて、ここから呼ばれる
> coil::find_dest_ifname() と
> coil::ifname_to_ipaddr() の関数です。
>
> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
> 108行と107行にある
>
> wait(NULL)
>
> でブロックしたまま帰ってきていません。
>
> ある条件というのは、マネージャの初期化を行なっているプロセスから、
> マネージャ初期化の前にネームサーバのコマンドを(別プロセスとして)起動し
> ているということです。同じコマンドをあらかじめ他のプロセスから起動してあ
> る場合は、問題なく動くのですが…。また、この症状が出るのはOS Xだけで、
> WindowsやLinuxでは同じ事を行なっても問題なく動いています。
>
> そして、OS Xでも上記の2つのwait(NULL)をどちらもコメントアウトすると、固
> まらなくなり、その後も特に問題なく動いているように見えます。
>
> ちなみにネームサーバのコマンドはomniNamesを参考に自前で実装した
> Choreonoid付属のものです。WindowsやMacではネームサーバがデーモンとして自
> 動では起動しないのが普通だと思いますが、そのような場合でもChoreonoidを起
> 動するだけで簡単にシミュレーションを行えるように、この機能をつけています。
>
> 以上のような症状なのですが、今後のリリースで上記のwait(NULL)を除去しても
> らうというのは問題ありますでしょうか?
>

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02893] OS X においてマネージャ初期化時に固まる症状

中岡さん

安藤です

ご指摘ありがとうございます。waitはpcloseに含まれているので、いらないですね。
おそらく、このwaitがNameServiceの子プロセスの終了待ちをしてしまっているため
ブロックしているのだと思います。チケット出して修正しておきます。
http://redmine.openrtm.org/issues/2807

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

2013年8月26日 22:12 Shin'ichiro Nakaoka :
>
> すみません、訂正です。
>
>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>> 108行と107行にある
>>
>> wait(NULL)
>
> は、108行と167行でした。
>
>
> (08/26/13 22:08), 中岡 慎一郎 wrote:
>>
>> 産総研の中岡です。
>>
>> 度々すみません、Mac OS X (Lion) においてマネージャ初期化時に固まるという
>> 不可解な症状に遭遇しましたので、報告させてください。
>>
>> 状況としては、Choreonoidにおいて起動時にRTC::Manager::init()を行なってお
>> り、ある条件下でこの関数が固まります。
>>
>> 固まる箇所をたどっていくと、
>>
>> Manager::initNaming() -
>> NamingManager::registerNameServer()-
>> NamingManager::createNamingObj() -
>> NamingOnCorba::NamingOnCorba() -
>> coil::dest_to_endpoint()
>>
>> ときて、ここから呼ばれる
>> coil::find_dest_ifname() と
>> coil::ifname_to_ipaddr() の関数です。
>>
>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>> 108行と107行にある
>>
>> wait(NULL)
>>
>> でブロックしたまま帰ってきていません。
>>
>> ある条件というのは、マネージャの初期化を行なっているプロセスから、
>> マネージャ初期化の前にネームサーバのコマンドを(別プロセスとして)起動し
>> ているということです。同じコマンドをあらかじめ他のプロセスから起動してあ
>> る場合は、問題なく動くのですが…。また、この症状が出るのはOS Xだけで、
>> WindowsやLinuxでは同じ事を行なっても問題なく動いています。
>>
>> そして、OS Xでも上記の2つのwait(NULL)をどちらもコメントアウトすると、固
>> まらなくなり、その後も特に問題なく動いているように見えます。
>>
>> ちなみにネームサーバのコマンドはomniNamesを参考に自前で実装した
>> Choreonoid付属のものです。WindowsやMacではネームサーバがデーモンとして自
>> 動では起動しないのが普通だと思いますが、そのような場合でもChoreonoidを起
>> 動するだけで簡単にシミュレーションを行えるように、この機能をつけています。
>>
>> 以上のような症状なのですが、今後のリリースで上記のwait(NULL)を除去しても
>> らうというのは問題ありますでしょうか?
>>
>
>
> --
> Shin'ichiro Nakaoka
> _______________________________________________
> openrtm-users mailing list
> openrtm-users@openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02894] OS X においてマネージャ初期化時に固まる症状

たびたびすみません。
ちょっと調べてみたのですが、このwait()一応理由があって入ったようです。
もう少し調査が必要かもしれません。

http://www.openrtm.org/openrtm/en/content/openrtm-users-01670-%E3%82%BE%E3%83%B3%E3%83%93%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E6%B6%88%E3%81%97%E6%96%B9

安藤

2013年8月27日 10:43 Ando Noriaki :
> 中岡さん
>
> 安藤です
>
> ご指摘ありがとうございます。waitはpcloseに含まれているので、いらないですね。
> おそらく、このwaitがNameServiceの子プロセスの終了待ちをしてしまっているため
> ブロックしているのだと思います。チケット出して修正しておきます。
> http://redmine.openrtm.org/issues/2807
>
> ありがとうございました。
>
>
> 2013年8月26日 22:12 Shin'ichiro Nakaoka :
>>
>> すみません、訂正です。
>>
>>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>>> 108行と107行にある
>>>
>>> wait(NULL)
>>
>> は、108行と167行でした。
>>
>>
>> (08/26/13 22:08), 中岡 慎一郎 wrote:
>>>
>>> 産総研の中岡です。
>>>
>>> 度々すみません、Mac OS X (Lion) においてマネージャ初期化時に固まるという
>>> 不可解な症状に遭遇しましたので、報告させてください。
>>>
>>> 状況としては、Choreonoidにおいて起動時にRTC::Manager::init()を行なってお
>>> り、ある条件下でこの関数が固まります。
>>>
>>> 固まる箇所をたどっていくと、
>>>
>>> Manager::initNaming() -
>>> NamingManager::registerNameServer()-
>>> NamingManager::createNamingObj() -
>>> NamingOnCorba::NamingOnCorba() -
>>> coil::dest_to_endpoint()
>>>
>>> ときて、ここから呼ばれる
>>> coil::find_dest_ifname() と
>>> coil::ifname_to_ipaddr() の関数です。
>>>
>>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>>> 108行と107行にある
>>>
>>> wait(NULL)
>>>
>>> でブロックしたまま帰ってきていません。
>>>
>>> ある条件というのは、マネージャの初期化を行なっているプロセスから、
>>> マネージャ初期化の前にネームサーバのコマンドを(別プロセスとして)起動し
>>> ているということです。同じコマンドをあらかじめ他のプロセスから起動してあ
>>> る場合は、問題なく動くのですが…。また、この症状が出るのはOS Xだけで、
>>> WindowsやLinuxでは同じ事を行なっても問題なく動いています。
>>>
>>> そして、OS Xでも上記の2つのwait(NULL)をどちらもコメントアウトすると、固
>>> まらなくなり、その後も特に問題なく動いているように見えます。
>>>
>>> ちなみにネームサーバのコマンドはomniNamesを参考に自前で実装した
>>> Choreonoid付属のものです。WindowsやMacではネームサーバがデーモンとして自
>>> 動では起動しないのが普通だと思いますが、そのような場合でもChoreonoidを起
>>> 動するだけで簡単にシミュレーションを行えるように、この機能をつけています。
>>>
>>> 以上のような症状なのですが、今後のリリースで上記のwait(NULL)を除去しても
>>> らうというのは問題ありますでしょうか?
>>>
>>
>>
>> --
>> Shin'ichiro Nakaoka
>> _______________________________________________
>> openrtm-users mailing list
>> openrtm-users@openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-users
_______________________________________________
openrtm-users mailing list
openrtm-users@openrtm.org
http://www.openrtm.org/mailman/listinfo/openrtm-users

nakaoka
Offline
Last seen: 4 years 11 months ago
Joined: 2011-07-25 18:26
[openrtm-users 02896] OS X においてマネージャ初期化時に固まる症状

安藤さん

本件ご確認いただきありがとうございます。

waitですが、wait(NULL)とすると、waitpidでpidに-1を指定したのと同じになる
ようです。この場合、全ての子プロセスの終了を待つことになってしまいます。

そこで、waitではなくwaitpidの方の関数を使うようにして、pidのパラメータに
0を入れるというのはどうでしょう?こうしますと、「全ての子プロセス」では
なくて、「プロセスグループidが親と同一の子プロセス」になるようです。(ち
なみに、デフォルトではプロセスグループidは親と同じになるようです。)

Choreonoidでは子プロセス起動時にプロセスグループidを変えるようにしていま
すので、こちらを使えばブロックしないことを確認しました。

もう少し具体的に書くと、

wait(NULL);

となっているところを、

waitpid(0, NULL, NULL);

とすればOKです。

以上ご検討ください。

Choreonoidでは当面この修正を行うパッチファイルを配布に入れておこうと思い
ます。

以上よろしくお願いします。

(08/27/13 11:04), Ando Noriaki wrote:
> たびたびすみません。
> ちょっと調べてみたのですが、このwait()一応理由があって入ったようです。
> もう少し調査が必要かもしれません。
>
> http://www.openrtm.org/openrtm/en/content/openrtm-users-01670-%E3%82%BE%E3%83%B3%E3%83%93%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E6%B6%88%E3%81%97%E6%96%B9
>
> 安藤
>
>
>
> 2013年8月27日 10:43 Ando Noriaki :
>> 中岡さん
>>
>> 安藤です
>>
>> ご指摘ありがとうございます。waitはpcloseに含まれているので、いらないですね。
>> おそらく、このwaitがNameServiceの子プロセスの終了待ちをしてしまっているため
>> ブロックしているのだと思います。チケット出して修正しておきます。
>> http://redmine.openrtm.org/issues/2807
>>
>> ありがとうございました。
>>
>>
>> 2013年8月26日 22:12 Shin'ichiro Nakaoka :
>>>
>>> すみません、訂正です。
>>>
>>>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>>>> 108行と107行にある
>>>>
>>>> wait(NULL)
>>>
>>> は、108行と167行でした。
>>>
>>>
>>> (08/26/13 22:08), 中岡 慎一郎 wrote:
>>>>
>>>> 産総研の中岡です。
>>>>
>>>> 度々すみません、Mac OS X (Lion) においてマネージャ初期化時に固まるという
>>>> 不可解な症状に遭遇しましたので、報告させてください。
>>>>
>>>> 状況としては、Choreonoidにおいて起動時にRTC::Manager::init()を行なってお
>>>> り、ある条件下でこの関数が固まります。
>>>>
>>>> 固まる箇所をたどっていくと、
>>>>
>>>> Manager::initNaming() -
>>>> NamingManager::registerNameServer()-
>>>> NamingManager::createNamingObj() -
>>>> NamingOnCorba::NamingOnCorba() -
>>>> coil::dest_to_endpoint()
>>>>
>>>> ときて、ここから呼ばれる
>>>> coil::find_dest_ifname() と
>>>> coil::ifname_to_ipaddr() の関数です。
>>>>
>>>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>>>> 108行と107行にある
>>>>
>>>> wait(NULL)
>>>>
>>>> でブロックしたまま帰ってきていません。
>>>>
>>>> ある条件というのは、マネージャの初期化を行なっているプロセスから、
>>>> マネージャ初期化の前にネームサーバのコマンドを(別プロセスとして)起動し
>>>> ているということです。同じコマンドをあらかじめ他のプロセスから起動してあ
>>>> る場合は、問題なく動くのですが…。また、この症状が出るのはOS Xだけで、
>>>> WindowsやLinuxでは同じ事を行なっても問題なく動いています。
>>>>
>>>> そして、OS Xでも上記の2つのwait(NULL)をどちらもコメントアウトすると、固
>>>> まらなくなり、その後も特に問題なく動いているように見えます。
>>>>
>>>> ちなみにネームサーバのコマンドはomniNamesを参考に自前で実装した
>>>> Choreonoid付属のものです。WindowsやMacではネームサーバがデーモンとして自
>>>> 動では起動しないのが普通だと思いますが、そのような場合でもChoreonoidを起
>>>> 動するだけで簡単にシミュレーションを行えるように、この機能をつけています。
>>>>
>>>> 以上のような症状なのですが、今後のリリースで上記のwait(NULL)を除去しても
>>>> らうというのは問題ありますでしょうか?
>>>>
>>>
>>>
>>> --
>>> Shin'ichiro Nakaoka
>>> _______________________________________________
>>> openrtm-users mailing list
>>> openrtm-users@openrtm.org
>>> http://www.openrtm.org/mailman/listinfo/openrtm-users
> _______________________________________________
> openrtm-users mailing list
> openrtm-users@openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users
>

Ando Noriaki
Offline
Last seen: 1 year 9 months ago
Joined: 2011-09-04 17:20
[openrtm-users 02902] OS X においてマネージャ初期化時に固まる症状

中岡さん

安藤です

対処策をお送りいただきありがとうございます。
なぜLinuxではpcloseでゾンビが残っていたのか原因がわかりませんが、
とりあえずこれで行きたいと思います。

2013年8月27日 13:42 Shin'ichiro Nakaoka :
>
> 安藤さん
>
> 本件ご確認いただきありがとうございます。
>
> waitですが、wait(NULL)とすると、waitpidでpidに-1を指定したのと同じになる
> ようです。この場合、全ての子プロセスの終了を待つことになってしまいます。
>
> そこで、waitではなくwaitpidの方の関数を使うようにして、pidのパラメータに
> 0を入れるというのはどうでしょう?こうしますと、「全ての子プロセス」では
> なくて、「プロセスグループidが親と同一の子プロセス」になるようです。(ち
> なみに、デフォルトではプロセスグループidは親と同じになるようです。)
>
> Choreonoidでは子プロセス起動時にプロセスグループidを変えるようにしていま
> すので、こちらを使えばブロックしないことを確認しました。
>
> もう少し具体的に書くと、
>
> wait(NULL);
>
> となっているところを、
>
> waitpid(0, NULL, NULL);
>
> とすればOKです。
>
> 以上ご検討ください。
>
> Choreonoidでは当面この修正を行うパッチファイルを配布に入れておこうと思い
> ます。
>
> 以上よろしくお願いします。
>
> (08/27/13 11:04), Ando Noriaki wrote:
>> たびたびすみません。
>> ちょっと調べてみたのですが、このwait()一応理由があって入ったようです。
>> もう少し調査が必要かもしれません。
>>
>> http://www.openrtm.org/openrtm/en/content/openrtm-users-01670-%E3%82%BE%E3%83%B3%E3%83%93%E3%83%97%E3%83%AD%E3%82%BB%E3%82%B9%E3%81%AE%E6%B6%88%E3%81%97%E6%96%B9
>>
>> 安藤
>>
>>
>>
>> 2013年8月27日 10:43 Ando Noriaki :
>>> 中岡さん
>>>
>>> 安藤です
>>>
>>> ご指摘ありがとうございます。waitはpcloseに含まれているので、いらないですね。
>>> おそらく、このwaitがNameServiceの子プロセスの終了待ちをしてしまっているため
>>> ブロックしているのだと思います。チケット出して修正しておきます。
>>> http://redmine.openrtm.org/issues/2807
>>>
>>> ありがとうございました。
>>>
>>>
>>> 2013年8月26日 22:12 Shin'ichiro Nakaoka :
>>>>
>>>> すみません、訂正です。
>>>>
>>>>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>>>>> 108行と107行にある
>>>>>
>>>>> wait(NULL)
>>>>
>>>> は、108行と167行でした。
>>>>
>>>>
>>>> (08/26/13 22:08), 中岡 慎一郎 wrote:
>>>>>
>>>>> 産総研の中岡です。
>>>>>
>>>>> 度々すみません、Mac OS X (Lion) においてマネージャ初期化時に固まるという
>>>>> 不可解な症状に遭遇しましたので、報告させてください。
>>>>>
>>>>> 状況としては、Choreonoidにおいて起動時にRTC::Manager::init()を行なってお
>>>>> り、ある条件下でこの関数が固まります。
>>>>>
>>>>> 固まる箇所をたどっていくと、
>>>>>
>>>>> Manager::initNaming() -
>>>>> NamingManager::registerNameServer()-
>>>>> NamingManager::createNamingObj() -
>>>>> NamingOnCorba::NamingOnCorba() -
>>>>> coil::dest_to_endpoint()
>>>>>
>>>>> ときて、ここから呼ばれる
>>>>> coil::find_dest_ifname() と
>>>>> coil::ifname_to_ipaddr() の関数です。
>>>>>
>>>>> 1.1.0-RELEASEのsrc/lib/coil/posix/coil/Routing.cppにおいて、
>>>>> 108行と107行にある
>>>>>
>>>>> wait(NULL)
>>>>>
>>>>> でブロックしたまま帰ってきていません。
>>>>>
>>>>> ある条件というのは、マネージャの初期化を行なっているプロセスから、
>>>>> マネージャ初期化の前にネームサーバのコマンドを(別プロセスとして)起動し
>>>>> ているということです。同じコマンドをあらかじめ他のプロセスから起動してあ
>>>>> る場合は、問題なく動くのですが…。また、この症状が出るのはOS Xだけで、
>>>>> WindowsやLinuxでは同じ事を行なっても問題なく動いています。
>>>>>
>>>>> そして、OS Xでも上記の2つのwait(NULL)をどちらもコメントアウトすると、固
>>>>> まらなくなり、その後も特に問題なく動いているように見えます。
>>>>>
>>>>> ちなみにネームサーバのコマンドはomniNamesを参考に自前で実装した
>>>>> Choreonoid付属のものです。WindowsやMacではネームサーバがデーモンとして自
>>>>> 動では起動しないのが普通だと思いますが、そのような場合でもChoreonoidを起
>>>>> 動するだけで簡単にシミュレーションを行えるように、この機能をつけています。
>>>>>
>>>>> 以上のような症状なのですが、今後のリリースで上記のwait(NULL)を除去しても
>>>>> らうというのは問題ありますでしょうか?
>>>>>
>>>>
>>>>
>>>> --
>>>> Shin'ichiro Nakaoka
>>>> _______________________________________________
>>>> openrtm-users mailing list
>>>> openrtm-users@openrtm.org
>>>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>> _______________________________________________
>> openrtm-users mailing list
>> openrtm-users@openrtm.org
>> http://www.openrtm.org/mailman/listinfo/openrtm-users
>>
>
>
> --
> Shin'ichiro Nakaoka
> _______________________________________________
> openrtm-users mailing list
> openrtm-users@openrtm.org
> http://www.openrtm.org/mailman/listinfo/openrtm-users

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