null+****@clear*****
null+****@clear*****
2011年 10月 6日 (木) 13:24:26 JST
Kouhei Sutou 2011-10-06 04:24:26 +0000 (Thu, 06 Oct 2011) New Revision: 1b4c6066c36b7ad4ff40e6899dc39e1a2be80b27 Log: use global grn_ctx for process global grn object. Modified files: ha_mroonga.cc mrn_sys.c mrn_sys.h Modified: ha_mroonga.cc (+12 -12) =================================================================== --- ha_mroonga.cc 2011-10-06 02:51:05 +0000 (4f3acc7) +++ ha_mroonga.cc 2011-10-06 04:24:26 +0000 (69efcc4) @@ -962,7 +962,7 @@ static int mrn_init(void *p) // init hash if (!(mrn_hash = grn_hash_create(ctx, NULL, - MRN_MAX_KEY_SIZE, sizeof(size_t), + MRN_MAX_KEY_SIZE, sizeof(grn_obj *), GRN_OBJ_KEY_VAR_SIZE))) { GRN_LOG(ctx, GRN_LOG_ERROR, "cannot init hash, exiting"); goto err_hash_create; @@ -2005,28 +2005,28 @@ int ha_mroonga::ensure_database_create(const char *name) mrn_db_path_gen(name, db_path); pthread_mutex_lock(&mrn_db_mutex); - if (mrn_hash_get(ctx, mrn_hash, db_name, (void **) &(db)) != 0) { + if (mrn_hash_get(&mrn_ctx, mrn_hash, db_name, &db) != 0) { if (stat(db_path, &db_stat)) { // creating new database GRN_LOG(ctx, GRN_LOG_INFO, "database not found. creating...(%s)", db_path); - db = grn_db_create(ctx, db_path, NULL); - if (ctx->rc) { + db = grn_db_create(&mrn_ctx, db_path, NULL); + if (mrn_ctx.rc) { pthread_mutex_unlock(&mrn_db_mutex); error = ER_CANT_CREATE_TABLE; - my_message(error, ctx->errbuf, MYF(0)); + my_message(error, mrn_ctx.errbuf, MYF(0)); DBUG_RETURN(error); } } else { // opening existing database - db = grn_db_open(ctx, db_path); - if (ctx->rc) { + db = grn_db_open(&mrn_ctx, db_path); + if (mrn_ctx.rc) { pthread_mutex_unlock(&mrn_db_mutex); error = ER_CANT_OPEN_FILE; - my_message(error, ctx->errbuf, MYF(0)); + my_message(error, mrn_ctx.errbuf, MYF(0)); DBUG_RETURN(error); } } - mrn_hash_put(ctx, mrn_hash, db_name, db); + mrn_hash_put(&mrn_ctx, mrn_hash, db_name, db); } pthread_mutex_unlock(&mrn_db_mutex); grn_ctx_use(ctx, db); @@ -2046,15 +2046,15 @@ int ha_mroonga::ensure_database_open(const char *name) mrn_db_path_gen(name, db_path); pthread_mutex_lock(&mrn_db_mutex); - if (mrn_hash_get(ctx, mrn_hash, db_name, (void **) &(db)) != 0) { - db = grn_db_open(ctx, db_path); + if (mrn_hash_get(&mrn_ctx, mrn_hash, db_name, &db) != 0) { + db = grn_db_open(&mrn_ctx, db_path); if (ctx->rc) { pthread_mutex_unlock(&mrn_db_mutex); error = ER_CANT_OPEN_FILE; my_message(error, ctx->errbuf, MYF(0)); DBUG_RETURN(error); } - mrn_hash_put(ctx, mrn_hash, db_name, db); + mrn_hash_put(&mrn_ctx, mrn_hash, db_name, db); } pthread_mutex_unlock(&mrn_db_mutex); grn_ctx_use(ctx, db); Modified: mrn_sys.c (+6 -6) =================================================================== --- mrn_sys.c 2011-10-06 02:51:05 +0000 (934634b) +++ mrn_sys.c 2011-10-06 04:24:26 +0000 (67b9cbe) @@ -27,36 +27,36 @@ #include <string.h> #include "mrn_sys.h" -int mrn_hash_put(grn_ctx *ctx, grn_hash *hash, const char *key, void *value) +int mrn_hash_put(grn_ctx *ctx, grn_hash *hash, const char *key, grn_obj *value) { int added, res=0; void *buf; - grn_hash_add(ctx, hash, (const char*) key, strlen(key), &buf, &added); + grn_hash_add(ctx, hash, (const char *)key, strlen(key), &buf, &added); // duplicate check if (added == 0) { GRN_LOG(ctx, GRN_LOG_WARNING, "hash put duplicated (key=%s)", key); res = -1; } else { // store address of value - memcpy(buf, &value, sizeof(buf)); + memcpy(buf, &value, sizeof(grn_obj *)); GRN_LOG(ctx, GRN_LOG_DEBUG, "hash put (key=%s)", key); } return res; } -int mrn_hash_get(grn_ctx *ctx, grn_hash *hash, const char *key, void **value) +int mrn_hash_get(grn_ctx *ctx, grn_hash *hash, const char *key, grn_obj **value) { int res = 0; grn_id id; void *buf; - id = grn_hash_get(ctx, hash, (const char*) key, strlen(key), &buf); + id = grn_hash_get(ctx, hash, (const char *)key, strlen(key), &buf); // key not found if (id == GRN_ID_NIL) { GRN_LOG(ctx, GRN_LOG_DEBUG, "hash get not found (key=%s)", key); res = -1; } else { // restore address of value - memcpy(value, buf, sizeof(buf)); + memcpy(value, buf, sizeof(grn_obj *)); } return res; } Modified: mrn_sys.h (+2 -2) =================================================================== --- mrn_sys.h 2011-10-06 02:51:05 +0000 (2bae815) +++ mrn_sys.h 2011-10-06 04:24:26 +0000 (32b4688) @@ -42,8 +42,8 @@ #endif /* functions */ -int mrn_hash_put(grn_ctx *ctx, grn_hash *hash, const char *key, void *value); -int mrn_hash_get(grn_ctx *ctx, grn_hash *hash, const char *key, void **value); +int mrn_hash_put(grn_ctx *ctx, grn_hash *hash, const char *key, grn_obj *value); +int mrn_hash_get(grn_ctx *ctx, grn_hash *hash, const char *key, grn_obj **value); int mrn_hash_remove(grn_ctx *ctx, grn_hash *hash, const char *key); char *mrn_db_path_gen(const char *arg, char *dest);