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

Back to archive index

Hiroyuki Komatsu komat****@taiya*****
2005年 2月 25日 (金) 04:23:41 JST


小松です。

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();
|     }
  
に変更してください。どなたかコミットしてくださるとうれしいです。

これまでは、一番最後に作成された PRIME サーバに命令が全部飛んで
いたので、コネクションを二重に閉じようとしてエラーが起こっていた
ようです。

# どうもいままでは、アプリケーションにテキストエントリが
# 10個あった場合、PRIME も 10個立ち上がっていたようです。
# でも使われているのは、そのうちのひとつでした。 (^^;;;

-- 
                                                            小松弘幸
                                                -----------------------
                                                   http://taiyaki.org/




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