[Groonga-commit] groonga/groonga [master] put lock around grn_dat_update_by_id()

Back to archive index

null+****@clear***** null+****@clear*****
2011年 11月 22日 (火) 10:11:21 JST


Daijiro MORI	2011-11-22 01:11:21 +0000 (Tue, 22 Nov 2011)

  New Revision: 5f520ab18c2b20509ef063227029ecaa07a9fac0

  Log:
    put lock around grn_dat_update_by_id()

  Modified files:
    lib/db.c

  Modified: lib/db.c (+11 -1)
===================================================================
--- lib/db.c    2011-11-21 21:08:01 +0000 (9855a40)
+++ lib/db.c    2011-11-22 01:11:21 +0000 (67ccd6c)
@@ -6136,7 +6136,17 @@ grn_table_update_by_id(grn_ctx *ctx, grn_obj *table, grn_id id,
   grn_rc rc = GRN_OPERATION_NOT_SUPPORTED;
   GRN_API_ENTER;
   if (table->header.type == GRN_TABLE_DAT_KEY) {
-    rc = grn_dat_update_by_id(ctx, (grn_dat *)table, id, dest_key, dest_key_size);
+    grn_dat *dat = (grn_dat *)table;
+    if (dat->io && !(dat->io->flags & GRN_IO_TEMPORARY)) {
+      if (grn_io_lock(ctx, dat->io, 10000000)) {
+        rc = ctx->rc;
+      } else {
+        rc = grn_dat_update_by_id(ctx, dat, id, dest_key, dest_key_size);
+        grn_io_unlock(dat->io);
+      }
+    } else {
+      rc = grn_dat_update_by_id(ctx, dat, id, dest_key, dest_key_size);
+    }
   }
   GRN_API_RETURN(rc);
 }




Groonga-commit メーリングリストの案内
Back to archive index