[groonga-dev,01442] Re: kqueue 利用時、`-d' オプションが使えない

Back to archive index

Kouhei Sutou kou****@clear*****
2013年 5月 27日 (月) 12:48:24 JST


須藤です。

In <CA+0tFcftf83GWg232CrHAfnpyX=rfgx-****@mail*****>
  "[groonga-dev,01440] kqueue 利用時、`-d' オプションが使えない" on Sat, 13 Apr 2013 18:14:53 +0900,
  Masahiro KONISHI <mkoni****@sea*****> wrote:

> groonga コマンドのバグを発見しましたので、取り急ぎ報告します。

ありがとうございます!

> Mac OS X 等、kqueue を用いる環境(USE_KQUEUE が define される環境)では、
> `-d' オプションを付けて groonga コマンドを実行すると、下記のエラーを吐いて
> プロセスがすぐに終了します。
> 
> | 2013-04-13 17:17:26.657910|e| syscall error 'poll' (Bad file descriptor)
> 
> 原因は、kqueue(2) の実行後に fork(2) しているためだと思われます。
> 以下に引用した OS X の manpages に記載されている通り、kqueue(2) で返された
> ファイルディスクリプタは fork(2) で生成された子プロセスに引き継がれません。
> 従って、groonga.c において、daemonize() を grn_com_event_init() よりも
> 先に呼び出す必要があります。
> 
> | The kqueue() system call creates a new kernel event queue and returns a
> | descriptor.  The queue is not inherited by a child created with fork(2).
>                ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

なるほど!
fork()してからkqueue()を呼ぶようにしました!

この修正は今月のリリースに含まれます。(ぎりぎりでした。)

-- 
須藤 功平 <kou****@clear*****>
株式会社クリアコード <http://www.clear-code.com/> (03-6231-7270)

groongaサポート:
  http://groonga.org/ja/support/
パッチ採用はじめました:
  http://www.clear-code.com/recruitment/
コミットへのコメントサービスはじめました:
  http://www.clear-code.com/services/commit-comment.html




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