Kouhei Sutou
kou****@cozmi*****
2008年 7月 7日 (月) 10:51:49 JST
須藤です。 キーサイズがuint32_tでIHP()が真なハッシュ(IはIOのI?)に対して sen_hash_delete_by_id()をすると落ちます。 sen_ctx *context; sen_hash *hash; uint32_t key; sen_table_search_flags flags; sen_id id; context = sen_ctx_open(NULL, SEN_CTX_USEQL); hash = sen_hash_create(context, "/tmp/xxx", sizeof(uint32_t), 64, 0, sen_enc_default); key = 29; flags = SEN_TABLE_ADD; id = sen_hash_lookup(hash, &key, sizeof(uint32_t), NULL, &flags); sen_hash_delete_by_id(hash, id); とりあえず、これで落ちなくなるのですが、これでいいかどうかは わかりません。。。 Index: lib/hash.c =================================================================== --- lib/hash.c (リビジョン 914) +++ lib/hash.c (作業コピー) @@ -650,8 +650,10 @@ if (IHP(hash)) { uint32_t size = ee->size - 1; struct sen_hash_header *hh = hash->header; - ee->key = hh->garbages[size]; - hh->garbages[size] = id; + if (ee->size != 0) { + ee->key = hh->garbages[size]; + hh->garbages[size] = id; + } } else { ee->key = hash->garbages; hash->garbages = id;