TOKUNAGA Hiroyuki
tkng****@xem*****
2005年 2月 25日 (金) 06:08:00 JST
On Fri, 25 Feb 2005 05:56:20 +0900 Hiroyuki Komatsu <komat****@taiya*****> wrote: > 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つ立ち上がりますよ。 すいません、なんか寝ぼけたこと書いてました。prime-init-handlerはコンテ キスト生成に使われる関数なんで、コンテキスト生成毎に呼ばれて当たり前です ね。 # よく今までのコードで動いてたなぁと逆にびっくりしました。 -- 徳永拓之 tkng****@xem***** http://kodou.net/