トップ «前の日記(2003-03-13) 最新 次の日記(2003-03-16)» 月表示 編集

日々の流転


2003-03-15 [長年日記]

λ. 四十九日の法会と納骨。

λ. まさきたんかわゆい。

λ. CHISE Symposium 2003RHG読書会にも興味はあったんですけどね。

λ. 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。内訳は

  1. このorb変数からの参照
  2. _ORBit_orbからの参照
  3. "RootPOA"との相互参照
  4. "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のいずれかが間違い? あるいは……

Tags: cygwin

λ. GConf-2.2.0

同じくSteven O'Brien氏のパッチを適当に編集してあてる。結果は、test/testpersistenceが「*** FAILED: float values nan and 8.3 are not equal (epsilon 13.4)」で通らない事以外は、一応動いているようだ。ただ、ロックファイルの扱いがなんだかおかしい気がする。

Tags: cygwin