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

[debian-devel:11503] Re: jfbterm



佐野@浜松です。

In <20000120152315T.hattas@xxxxxxxxxxxxxxxxxxxxxx>,
 at Thu, 20 Jan 2000 15:23:30 +0900,
 on [debian-devel:11425] Re: jfbterm,
  Hatta Shuzo <hattas@xxxxxxxxxxxxxxxxxxxxxx> さん writes:

hattas> > ・jfbterm が exit で凍る問題

これなんですが、いろいろ試してみた結果、 vtermlow.c の

void tvterm_unregister_signal(void) の中にある

   ioctl(0, VT_SETMODE, &vtm);

が原因らしい、ということがわかりました。

こいつの前で exit(-1) してしまうか、あるいはこの行をコメントアウトして
しまえば、凍らなくなります。ただし自動的に元のモードに戻らないので、
手動で仮想端末を切り換えて元に戻す必要はありますが。

あるいは、jfbterm を実行してから、他の端末に移って、kill -TERM で
止めてしまっても同様な結果になります。

 # 場合によっては jfbterm を実行した shell のほうも kill -TERM で
 # 止めないと shell が落ちないことがあるみたい。exec jfbterm で
 # 起動していれば、確実に shell まで落ちて init で再起動されるけれど。

なお、b-f の floppy から起動していない普通のシステムでも
void tvterm_unregister_signal(void) の

        ioctl(sig_obj->term->ttyfd, TIOCSWINSZ, sig_obj->win);
        ioctl(0, TIOCCONS, NULL);

は失敗しているようです。 

/*
        if (ioctl(0, VT_SETMODE, &vtm)) {
		fprintf(stderr,"1st ioctl failed\r\n");
		fflush(stderr);
		exit(-1);
	}
*/

        if (ioctl(sig_obj->term->ttyfd, TIOCSWINSZ, sig_obj->win)) {
		fprintf(stderr,"ioctl(TIOCWINSZ) failed\r\n");
		fflush(stderr);
		exit(1);
	}

        if (ioctl(0, TIOCCONS, NULL)) {
		fprintf(stderr,"ioctl(TIOCCONS) failed\r\n");
		fflush(stderr);
		exit(-1);
	}

とかして、exit(1) をコメントにしたり有効にしたりしてみると、
そのへんが確認できると思います。

何故 boot-floppies の環境だと

   ioctl(0, VT_SETMODE, &vtm);

が成功しないで凍りつくのか、その原因については、まだわかりません。

以上、現状報告でした。

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