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/