[Groonga-commit] groonga/groonga at e201687 [master] Fix race condition when caching default tokenizer options

アーカイブの一覧に戻る

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 



More information about the Groonga-commit mailing list
アーカイブの一覧に戻る