[prime-dev: 660] Re: PRIME 0.9.4-beta2, uim-prime for 0.4.6, prime-el-1.5.1.2

Back to archive index

TOKUNAGA Hiroyuki tkng****@xem*****
2005年 2月 25日 (金) 05:44:29 JST


On Fri, 25 Feb 2005 04:23:41 +0900
Hiroyuki Komatsu <komat****@taiya*****> wrote:

> 小松です。
> 
> At Thu, 24 Feb 2005 18:38:01 +0900,
> Hiroyuki Ikezoe wrote:
> > > PRIME 0.9.4-beta2、uim-0.4.6 用のクライアント、prime-el-1.5.1.2 を
> > > 公開しました。
> > 
> > 再現条件はよくわからないんですが、uim-primeを使っていると、
> > 
> > /usr/lib/ruby/1.8/prime/prime2.rb:49:in `send': undefined method
> > `context_reset' for nil:NilClass (NoMethodError) from /usr/lib/
> > ruby/1.8/ prime/prime2.rb:49:in `session_command' from /usr/lib/
> > ruby/1.8/prime/ protocol.rb:442:in `context_reset' from /usr/lib/
> > ruby/1.8/prime/ protocol.rb:112:in `send' from /usr/lib/ruby/1.8/
> > prime/ protocol.rb:112:in `send_command' from /usr/lib/ruby/1.8/
> > prime/ protocol.rb:99:in `execute' from /usr/lib/ruby/1.8/prime/
> > server.rb:32:in `session_loop' from /usr/lib/ruby/1.8/prime/
> > server.rb:31:in `synchronize' from /usr/lib/ruby/1.8/prime/
> > server.rb:31:in `session_loop' from /usr/lib/ruby/1.8/prime/
> > server.rb:25:in `loop' from /usr/lib/ruby/1.8/prime/server.rb:25:in
> > `session_loop' from /usr/lib/ruby/1.8/prime/server.rb:134:in `start'
> >         from /usr/bin/prime:152:in `main'
> >         from /usr/bin/prime:17
> > 
> > ってなエラーが出てアプリケーションが固まることがあります。
> > プロセスを見てると、PRIMEのプロセスが生成されては死ぬ、ということを
> > 繰り返してるような感じです。
> 
> こちらでも確認しました。
> 
>   0. Unix ドメインソケットは使用しない (デフォルト)。
>   1. gedit を起動。
>   2. Ctrl-f で検索ウインドウを出す。
>   3. そのまま閉じる。
>   4. gedit で何かキーを押す。
> 
> で、固まります。
> 
> 確認したところ、原因は uim/prime.c 内での PRIME プロセスの PID 管理が
> うまくいっていないようでした。
> 
> 結論としては、uim/prime.c:prime_lib_init(uim_lisp use_udp_) の下の方
> を、
> 
> |     } else {
> -       prime_pid = uim_ipc_open_command( prime_pid, &primer,
> &primew, prime_command );
> |       if(prime_pid == 0) {
> |         return uim_scm_f();
> |       }
> |       return uim_scm_t();
> |     }
> 
> から、
> 
> |     } else {
> +       if (prime_pid == 0) {
> +         prime_pid =
> +           uim_ipc_open_command( prime_pid, &primer, &primew,
> prime_command ); +       }
> |       if(prime_pid == 0) {
> |         return uim_scm_f();
> |       }
> |       return uim_scm_t();
> |     }
>   
> に変更してください。どなたかコミットしてくださるとうれしいです。

 ありがとうございます。r719でコミットしました。

# 実はなんでこれでバグが直るのか理解できてませんけど…。

> これまでは、一番最後に作成された PRIME サーバに命令が全部飛んで
> いたので、コネクションを二重に閉じようとしてエラーが起こっていた
> ようです。
> 
> # どうもいままでは、アプリケーションにテキストエントリが
> # 10個あった場合、PRIME も 10個立ち上がっていたようです。
> # でも使われているのは、そのうちのひとつでした。 (^^;;;

 prime_lib_initはアプリケーション毎に1回しか呼ばれないはずなので、パッ
チ適用前でもPRIME のプロセス数はアプリケーションと同じ数のはずです。テキ
ストウィジェット毎に生成してたんでは、さすがに重たすぎて動かないんじゃな
いかと。


-- 
徳永拓之
tkng****@xem*****
http://kodou.net/



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