[Anthy-dev 1009] Re: [uim] PRIMEの起動に失敗するとアプリケーションが動作しなくなる

Back to archive index

yusuk****@cheru***** yusuk****@cheru*****
2004年 8月 28日 (土) 00:10:44 JST


田畑です。

先月に報告して頂いた問題ですが、uim-ipc.cの中でuim_ipc_send_command()の中で
feof()を使ってパイプが切れていないか確認するようにして、アプリケーションが
落ちることは修正してコミットしました。

キーを押す度にprimeコマンドを再起動するとか、prime.scmがエラーを出すといった
問題が残っていますが、この辺の解決は徳永さん、お願いできますか?

> On Mon, 26 Jul 2004 15:24:29 +0900
> akira yamada / やまだあきら <akira****@arika*****> wrote:
> 
> > 
> > gktのimmoduleとしてuimを使っていて、
> > 変換メソッドをuim-primeにしているときに
> > 何らかの理由でprimeの起動に失敗すると
> > アプリケーションが正常に起動してこなくなります。
> > その際マシン負荷が上がりっぱなしになります。
> > 
> > 再現方法は、primeが使用しているライブラリを削除する、
> > あるいは~/.prime以下のファイルを自分以外の持ち物とするなどして
> > immoduleを使ったアプリケーションを起動します。
> 
>  報告ありがとうございます。こちらでも再現しました。が、次リリースまでに
> 修正するのは難しいかもしれません。とりあえずどこまで調べたかを書いておき
> ます。
> 
> 調べてみたところ、
> 
> (define prime-send-command
>   (lambda (command)
>     (let ((result (prime-lib-send-command command)))
>       (let loop ((res result))
> 	(if (string=? res "")
> 	    (loop (prime-lib-send-command ""))
> 	    res
> 	    )))))
> 
> のloopで無限ループに陥っていました。このループは[prime-dev:352]
> http://lists.sourceforge.jp/mailman/archives/prime-dev/2004-May/000351.html
> への対策でいれているものです。
> 
>  しかし、このループを外しても結局アプリケーションを正常に起動させること
> はできません。デバッガからアプリケーションを実行すると以下のような感じの
> stack traceが取れる事から、fflushでなにやらまずいことが起きているような
> 感じです。(スタックが壊れちゃってるみたいなんで、信用していいのかどうか
> もわかりませんけれども。)
> 
> 
> Program received signal SIGPIPE, Broken pipe.
> [Switching to Thread 1082114720 (LWP 2591)]
> 0x4059af1e in __write_nocancel () from /lib/tls/libc.so.6
> (gdb) bt
> #0  0x4059af1e in __write_nocancel () from /lib/tls/libc.so.6
> #1  0x4053b3e9 in _IO_new_file_write () from /lib/tls/libc.so.6
> #2  0x4053a60f in new_do_write () from /lib/tls/libc.so.6
> #3  0x4053a5a8 in _IO_new_do_write () from /lib/tls/libc.so.6
> #4  0x4053ac42 in _IO_new_file_sync () from /lib/tls/libc.so.6
> #5  0x4052f059 in fflush () from /lib/tls/libc.so.6
> #6  0x41353d9a in uim_ipc_send_command ()
>    from /home/tkng/uim-trunk/uim/.libs/libuim.so.0
> 
> 
> uim-ipc.cを見ると、uim_ipc_send_commandは(必要ならば)コマンドをオープ
> ンして、fputsしてfflushしているだけですので、uim側でどういうチェックを入
> れれば問題が防げるのかが私にはわかりませんでした。
> 
> 
> -- 
> 徳永拓之
> tkng****@xem*****
> http://kodou.net/
> _______________________________________________
> Anthy-dev mailing list
> Anthy****@lists*****
> http://lists.sourceforge.jp/mailman/listinfo/anthy-dev



Anthy-dev メーリングリストの案内
Back to archive index