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

[debian-devel:11512] Re: jfbterm



佐野@浜松です。

「終了時に凍る」問題と直接には関係無いみたいですが (一応やってみた)
 jfbterm の term.c にある

void sigchld(sig) int sig; {
        int st;
        int ret;
        ret = wait(&st);
        if (ret == gChildProcessId || ret == ECHILD) {
                tvterm_unregister_signal();
                tterm_final(&gTerm);
                exit(EXIT_SUCCESS);
        }
        signal(SIGCHLD, sigchld);
}

って正しいですか ? man 2 wait すると

返り値
       終了した子供のプロセス ID が返される、エラーの場 合 は  -1 が、
         WNOHANG が使用されていて適切な子供が存在しない場合には
        0 が返される。 (これらの場合には errno が適切に設定される。)
       

エラー
       ECHILD pid  で指定したプロセスが存在しないか、呼び出した
              プロセスの子プロセスでない。 (SIGCHLD に SIG_IGN を
              設定した場合には自分自信の子供でもこうなる。)


となっているので、

        if (ret == gChildProcessId || ret == ECHILD) {

この行は

        if (ret == gChildProcessId || (ret == -1 && errno == ECHILD)) {

が正しいのかな、という気がするのですが。あるいは


        if (ret == gChildProcessId || ret == -1) {

のほうがもっといいかも。

念のために woody の 0.3.10-1 も見てみましたが、変更されていない
みたいなので質問してみることにしました。もし「これでいいんだ」と
いうことでしたら無視してくださって結構です。 (> hattas さま)

--
     # (わたしのおうちは浜松市、「夜のお菓子」で有名さ。)
    <kgh12351@xxxxxxxxxxx> : Taketoshi Sano (佐野 武俊)