[prime-dev: 661] 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日 (金) 05:56:20 JST


At Fri, 25 Feb 2005 05:44:29 +0900,
TOKUNAGA Hiroyuki wrote:
> > 結論としては、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_lib_init が複数回呼ばれるのを前提とします。

すでに prime_pid に PID:12345 が代入されている状態で、もういちど
prime_lib_init が呼ばれると、prime_pid の値が PID:67890 に上書き
されてしまいます。 uim クライアントは、PID:12345 に対してコマンドを
送信する必要もあるのですが、PID:67890 に上書きされているため、
PID:12345 が管理しているセッションへのリクエストも PID:67890 に
送信してしまうからです。


> > これまでは、一番最後に作成された PRIME サーバに命令が全部飛んで
> > いたので、コネクションを二重に閉じようとしてエラーが起こっていた
> > ようです。
> > 
> > # どうもいままでは、アプリケーションにテキストエントリが
> > # 10個あった場合、PRIME も 10個立ち上がっていたようです。
> > # でも使われているのは、そのうちのひとつでした。 (^^;;;
> 
>  prime_lib_initはアプリケーション毎に1回しか呼ばれないはずなので、パッ
> チ適用前でもPRIME のプロセス数はアプリケーションと同じ数のはずです。テキ
> ストウィジェット毎に生成してたんでは、さすがに重たすぎて動かないんじゃな
> いかと。

   0. Unix ドメインソケットは使用しない (デフォルト)。
   1. gedit を起動。
   2. Ctrl-f で検索ウインドウを出す。

でプロセスが 3つ立ち上がりますよ。

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




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