寺西です。 Tadamasa Teranishi wrote: > > この情報を元にちょっと調べてみます。
いろいろ調べてみると、cmp_phrase_hash 内で free した val.data に アクセスする可能性がありました。 # デバッガの情報のまんまですけど。 > 素人考えでは、val.data[j]に入っているポインタの値が変になってる > 様に思えるのですが、これがどこで alloc されてるのかが追えなくて… その通りでした。 もう少し書くと、フレーズ検索の際に do_phrase_search の中から cmp_phrase_hash を呼び出すのですが、この第二引数 val が TOO_MUCH_* の場合に val.data は free 済みとなっています。 にもかかわらず、cmp_phrase_hash で使っているのでコアダンプするよう です。 コアダンプせずに動く環境は、たまたま動いているだけでした。 おそらく "日本の歴史" で検索するのではなく、"日本 の 歴史" で検索 すればコアダンプしないと思います。 とりあえず、以下の修正を行えばコアダンプしないようになると思います。 ただ、 $ namazu -f namazurc "日本の歴史" . 検索結果 参考ヒット数: { [ 日本 (ヒット数が多すぎるので無視しました) ] [ の ( ヒット数が多すぎるので無視しました) ] [ 歴史: 1 ] :: 0 } 検索式にマッチする文書はありませんでした。 ですが、 $ namazu -f namazurc "日本 の 歴史" . 検索結果 参考ヒット数: [ 日本 (ヒット数が多すぎるので無視しました) ] [ の (ヒ ット数が多すぎるので無視しました) ] [ 歴史: 1 ] 検索式にマッチする 1 個の文書が見つかりました。 1. test3.txt (スコア: 2) 著者: 不明 日付: Thu, 14 Sep 2006 17:14:26 +0900 歴史 /tmp/debug/test3.txt (5 bytes) 現在のリスト: 1 - 1 となります。フレーズ検索の場合、「ヒット数が多すぎるので無視しました」 というメッセージですが、個々のワードを無視しているのではなく、 フレーズ全体を無視するような動作となり、メッセージが適当とはいえない かもしれません。 $ diff -up search.c.org search.c --- search.c.org 2006-09-15 02:03:06.000000000 +0900 +++ search.c 2006-09-15 02:03:46.000000000 +0900 @@ -355,6 +355,10 @@ cmp_phrase_hash(int hash_key, NmzResult if (val.num == 0) { return val; } + if (val.stat != SUCCESS) { + nmz_debug_printf("cmp_phrase_hash: val.stat [%d]\n", val.stat); + return val; + } ptr = nmz_getidxptr(phrase_index, hash_key); if (ptr < 0) { nmz_free_hlist(val); -- ===================================================================== 寺西 忠勝(TADAMASA TERANISHI) [EMAIL PROTECTED] http://www.asahi-net.or.jp/~yw3t-trns/index.htm Key fingerprint = 474E 4D93 8E97 11F6 662D 8A42 17F5 52F4 10E7 D14E _______________________________________________ Namazu-users-ja mailing list Namazu-users-ja@namazu.org http://www.namazu.org/cgi-bin/mailman/listinfo/namazu-users-ja