2003-03-15 [長年日記]
λ. 四十九日の法会と納骨。
λ. まさきたんかわゆい。
λ. CHISE Symposium 2003 と RHG読書会にも興味はあったんですけどね。
λ. ORBit2-2.6.0
性懲りもなく挑戦してみる。Steven O'Brien 氏のORBit1用のパッチはenumのサイズが2バイトである事を想定しているのだけど、少なくとも現在のgcc-3.2は4バイトだったので、彼のパッチは使わなかった。で、結果、一応は動くのだけど、クライアント(例えばtest/echo-client)の終了時に「** ERROR **: file orbit-object.c: line 146 (do_unref): assertion failed: (robj->refs < ORBIT_REFCOUNT_MAX && robj->refs > 0)」と言われる(サーバ側は言われない)。
少し追いかけてみると、main()の最初の「CORBA_ORB orb = CORBA_ORB_init(&argc, argv, "orbit-local-orb", &ev);」でORBへの参照を得て、この時点でrefs=4。内訳は
- このorb変数からの参照
- _ORBit_orbからの参照
- "RootPOA"との相互参照
- "POACurrent"との相互参照
main()の最後の「CORBA_Object_release((CORBA_Object)orb, &ev);」で(1)が解放されrefs=3
main()からリターンすると、g_atexit()で登録された corba-orb.cのshutdown_orb()が呼ばれて、 そこからCORBA_ORB_destroy()が呼ばれる。
CORBA_ORB_destroy()の中程でorb->initial_refsの中身を開放するので、 (3)と(4)の参照が解放され、refsが3から1に減る。 (ただしサーバ側だとここで減るのは1だけ。 サーバ側ではきっと"RootPOA"か"POACurrent"のどっちかが まだどこからかまだ参照されていて、そのため参照が減らないのかも)
CORBA_ORB_destroy()の最後の方の ORBit_RootObject_release (orb); でrefsが1から0に減る(解放されているのは(2)?)。(A)
正しそうだ。 しかし、直後に 「At this stage there shouldbe 1 ref left in the system - on the ORB」 というコメントがあり、この時点でrefsは1でなくてはいけないようだ。おかしいぞ。
CORBA_ORB_destroy()からリターンした後、 shutdown_orbでこのORBをもう一回 ORBit_RootObject_release (orb); している(解放されているのは(2)?)。(B)
AかBのいずれかが間違い? あるいは……
λ. GConf-2.2.0
同じくSteven O'Brien氏のパッチを適当に編集してあてる。結果は、test/testpersistenceが「*** FAILED: float values nan and 8.3 are not equal (epsilon 13.4)」で通らない事以外は、一応動いているようだ。ただ、ロックファイルの扱いがなんだかおかしい気がする。
λ. Ruby/Gtk2備忘録
む。