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);
}