kousa****@nttda*****
kousa****@nttda*****
2007年 11月 22日 (木) 17:18:38 JST
幸坂です。こんにちは。 sen_query_termが落ちます。 http://qwik.jp/senna/bug_report.html この書式に習って書いてみます。 ・ハードウェア環境 ・CPU種別:Intel(R) Xeon(TM) CPU 2.40GHz * 2 ・メモリ容量:2GByte ・ハードディスク容量:70GByte ・バージョン情報 ・OS:RHEL4 (32bit) kernel 2.6.9 ・Sennaのバージョン 1.0.9 ・起こっている問題 ・sen_query_termが落ちます。 ・検索対象コンテンツの情報 ・10文字×3行 ・再現方法 擬似コードを書きます。 int my_query_term_callback(const char* term, unsigned int len, void* func_arg) { int* n = (int*)func_arg; (*n)++; printf("test %d %.*s", *n, len, term); return 1; } main () { ... char str[128] = "aaa -bbb +ccc"; int n = 0; sen_query q = sen_query_open(str, strlen(str), sen_sel_or, 32, 3); sen_query_term(q, &my_query_term_callback, &n); } 出力結果: test 1 aaa Sementation Fault (query.cの557行目のBULKP(c)で落ちているようです。) 予想していた出力結果 test 1 aaa test 2 bbb test 3 ccc 以下のように変更すると、予想通りの結果が返って来るのですが、 そもそも、私の使用方法が間違っている可能性もあります。 何かわかりましたらご教示ください。 $ diff RELEASE-1.0.9/lib/query.c RELEASE-1.0.9_fix/lib/query.c 557,562c557,562 < if (BULKP(c)) { < return func(c->u.b.value, c->u.b.size, func_arg); < } < for (token = c->u.l.car; token; token = token->u.l.cdr) { < if (!query_term_rec(q, token, func, func_arg)) { < return 0; /* abort */ --- > for (token = c; token != NIL; token = token->u.l.cdr) { > if (BULKP(token->u.l.car)) { > if (!func(token->u.l.car->u.b.value, > token->u.l.car->u.b.size, func_arg)) { > return 0; /* abort */ > }