[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[FDclone-users:00148] Re: {FreeBSD,OpenBSD}/sparc64, IA64(AIX 対応その後)



潮田です。
大変おそくなりました。

>  しらいです。
> 
> In Message-Id <03Feb24.175916jst.119043@inetgw.lightwell.co.jp>
>         SHIOTA Shoichi <Shoichi.Shiota@lightwell.co.jp>さんwrites:
> > 潮田です。
> 
> > >  いや、そういきなり一足飛びに先に進めないで、徐々に確認して
> > > いって下さい。ますは fdsh で sleep が動くところから。これが
> > > 出来て初めて次のステップに進めましょう。
> > 了解しました。
> 
>  遅くなっても構いませんので次の報告をお待ちしています。
で、ご報告を。
GW に入ったので、会社へ遊びに行き(仕事ではなくと言う意味で)
追って見ました。
で、 gdb にだまされていなければ、以下のような動きをしてリソースを
食いつぶして落ちているようです。

1. 子供が終了する
2. trap_chld() で捕獲される
3. trap_common() の終わりのほうで、trap_chld() をシグナルハンド
   ラとして再度セット
4. (なぜか) 3 の実行で SIGCHLD が再度やってくる
5. 2 からループ

と、無限の再帰呼び出しとでも言うような状態を起こしているように
みえます。

このため以下のように修正を入れてみました。

--- ここから ---
$ gdiff -u system.c.org system.c
--- system.c.org        2003-04-15 00:00:00.000000000 +0900
+++ system.c    2003-04-29 12:54:45.000000000 +0900
@@ -2051,7 +2051,13 @@

        if (trapped < 0) Xexit2(sig + 128);

-       if (signallist[i].func) signal(sig, (sigcst_t)(signallist[i].func));
+       if (signallist[i].func)
+#ifdef SIGCHLD
+               if (sig != SIGCHLD)
+                       signal(sig, (sigcst_t)(signallist[i].func));
+#else
+               signal(sig, (sigcst_t)(signallist[i].func));
+#endif
        errno = duperrno;
        return(trapped);
 }
--- ここまで ---
(折り返されているかもしれませんが、おわかりいただけると思います)

これで、やっと 

$ ./fdsh
$ sleep 2
$

と正常に動くようになりました。
また FDclone 上で
* Enter での PAGER の起動
* e での EDITOR 起動
* x で vi foo
なども起動したコマンドが終了後に、無事制御が FDclone へ
戻ることを確認しました。

ただ、これは完全に対処療法で理解や納得の上での修正ではありません。
私自身、 AIX 上で同じこと(SIGCHLD のハンドラ中で再度 SIGCHLD の
ハンドラのセット)をしているプログラムを書いていて、それが今も
某所で動いています。
もっと雑なつくりで、どんな signal を捕らえても、すべてのハンドラを
再度セットするようなやつですが。
うーん、なぞ。


> > このマシン自体は、すぐに IBM へ返してしまいますが、社内の
> > 他の部門には AIX 4.3.3 のマシンは存在していますので、動作確認
> > ぐらいであれば、いつでもできます。
現在 GW 中で他の部門の人間を捕まえれず、上記の結果は 5L
$ oslevel -r
5100-03
という version でのものです。
休みがあけたら、 4.3.3 でも試してみます。

# 販売や導入にかかわっていない私には Web 上で探し出せませんが
# AIX 4.3.3 のサポートは今年いっぱいだそうです。
# IBM は強制的に 5L (5.1 or 5.2) へ移行を行いたいようですね。
# 4.3.3 なんて version はそこら中(上記の某所もそうなんです)
# に入っているので猛反発は必至?