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

Back to archive index

Masahiro KONISHI mkoni****@sea*****
2013年 4月 13日 (土) 18:15:05 JST


こんにちは。

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).
               ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

以上です。

---
小西 昌裕 / Masahiro KONISHI
mkoni****@sea*****




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