Kouhei Sutou
null+****@clear*****
Fri Apr 6 09:52:06 JST 2018
Kouhei Sutou 2018-04-06 09:52:06 +0900 (Fri, 06 Apr 2018) New Revision: e2016873298f935911b261ddbc0515529fbef48d https://github.com/groonga/groonga/commit/e2016873298f935911b261ddbc0515529fbef48d Message: Fix race condition when caching default tokenizer options Modified files: lib/grn_table.h lib/table.c Modified: lib/grn_table.h (+1 -0) =================================================================== --- lib/grn_table.h 2018-04-06 09:43:04 +0900 (71a19e243) +++ lib/grn_table.h 2018-04-06 09:52:06 +0900 (eafb3dbe3) @@ -29,6 +29,7 @@ typedef struct { void *options; grn_option_revision options_revision; grn_close_func options_close_func; + grn_critical_section lock; } grn_table_tokenizer; void grn_table_tokenizer_init(grn_ctx *ctx, Modified: lib/table.c (+6 -0) =================================================================== --- lib/table.c 2018-04-06 09:43:04 +0900 (059fb1f9a) +++ lib/table.c 2018-04-06 09:52:06 +0900 (6bfdb20a2) @@ -139,6 +139,7 @@ grn_table_tokenizer_init(grn_ctx *ctx, tokenizer->options = NULL; tokenizer->options_revision = GRN_OPTION_REVISION_NONE; tokenizer->options_close_func = NULL; + CRITICAL_SECTION_INIT(tokenizer->lock); } static void @@ -158,6 +159,7 @@ grn_table_tokenizer_fin(grn_ctx *ctx, grn_table_tokenizer *tokenizer) { grn_table_tokenizer_fin_options(ctx, tokenizer); + CRITICAL_SECTION_FIN(tokenizer->lock); } void @@ -165,9 +167,11 @@ grn_table_tokenizer_set_proc(grn_ctx *ctx, grn_table_tokenizer *tokenizer, grn_obj *proc) { + CRITICAL_SECTION_ENTER(tokenizer->lock); grn_table_tokenizer_fin_options(ctx, tokenizer); tokenizer->proc = proc; + CRITICAL_SECTION_LEAVE(tokenizer->lock); } void @@ -177,6 +181,7 @@ grn_table_tokenizer_set_options(grn_ctx *ctx, grn_option_revision revision, grn_close_func close_func) { + CRITICAL_SECTION_ENTER(tokenizer->lock); grn_table_tokenizer_fin_options(ctx, tokenizer); tokenizer->options = options; @@ -184,6 +189,7 @@ grn_table_tokenizer_set_options(grn_ctx *ctx, if (options) { tokenizer->options_close_func = close_func; } + CRITICAL_SECTION_LEAVE(tokenizer->lock); } grn_rc -------------- next part -------------- HTML����������������������������... URL: https://lists.osdn.me/mailman/archives/groonga-commit/attachments/20180406/ee84fb94/attachment-0001.htm