[Groonga-commit] groonga/groonga [master] Added cas argument to grn_ja_put().

Back to archive index

null+****@clear***** null+****@clear*****
2010年 7月 28日 (水) 21:45:59 JST


Daijiro MORI	2010-07-28 12:45:59 +0000 (Wed, 28 Jul 2010)

  New Revision: ec69c9e96adad8b65be7f31ef4a87f5495e6b861

  Log:
    Added cas argument to grn_ja_put().

  Modified files:
    lib/db.c
    lib/store.c
    lib/store.h

  Modified: lib/db.c (+14 -14)
===================================================================
--- lib/db.c    2010-07-28 04:01:41 +0000 (c015e20)
+++ lib/db.c    2010-07-28 12:45:59 +0000 (c90a243)
@@ -2834,7 +2834,7 @@ default_column_set_value(grn_ctx *ctx, grn_proc_ctx *pctx, grn_obj *in, grn_obj
     switch (pctx->obj->header.type) {
     case GRN_COLUMN_VAR_SIZE :
       return grn_ja_put(ctx, (grn_ja *)pctx->obj, arg->id,
-                        in->u.p.ptr, value_size, 0); // todo type->flag
+                        in->u.p.ptr, value_size, 0, NULL); // todo type->flag
     case GRN_COLUMN_FIX_SIZE :
       if (((grn_ra *)pctx->obj)->header->element_size < value_size) {
         ERR(GRN_INVALID_ARGUMENT, "too long value (%d)", value_size);
@@ -4335,7 +4335,7 @@ grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id,
       if (call_hook(ctx, obj, id, value, flags)) { goto exit; }
       switch (obj->header.flags & GRN_OBJ_COLUMN_TYPE_MASK) {
       case GRN_OBJ_COLUMN_SCALAR :
-        rc = grn_ja_put(ctx, (grn_ja *)obj, id, v, s, flags);
+        rc = grn_ja_put(ctx, (grn_ja *)obj, id, v, s, flags, NULL);
         break;
       case GRN_OBJ_COLUMN_VECTOR :
         {
@@ -4356,7 +4356,7 @@ grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id,
                   grn_token_close(ctx, token);
                 }
                 rc = grn_ja_put(ctx, (grn_ja *)obj, id,
-                                GRN_BULK_HEAD(&buf), GRN_BULK_VSIZE(&buf), flags);
+                                GRN_BULK_HEAD(&buf), GRN_BULK_VSIZE(&buf), flags, NULL);
               }
               break;
             case GRN_VECTOR :
@@ -4371,10 +4371,10 @@ grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id,
                 }
               }
               rc = grn_ja_put(ctx, (grn_ja *)obj, id,
-                              GRN_BULK_HEAD(&buf), GRN_BULK_VSIZE(&buf), flags);
+                              GRN_BULK_HEAD(&buf), GRN_BULK_VSIZE(&buf), flags, NULL);
               break;
             case GRN_UVECTOR :
-              rc = grn_ja_put(ctx, (grn_ja *)obj, id, v, s, flags);
+              rc = grn_ja_put(ctx, (grn_ja *)obj, id, v, s, flags, NULL);
               break;
             default :
               ERR(GRN_INVALID_ARGUMENT, "vector, uvector or bulk required");
@@ -4385,7 +4385,7 @@ grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id,
             switch (value->header.type) {
             case GRN_BULK :
               if (!GRN_BULK_VSIZE(value)) {
-                rc = grn_ja_put(ctx, (grn_ja *)obj, id, NULL, 0, flags);
+                rc = grn_ja_put(ctx, (grn_ja *)obj, id, NULL, 0, flags, NULL);
               } else {
                 grn_obj v;
                 GRN_OBJ_INIT(&v, GRN_VECTOR, GRN_OBJ_DO_SHALLOW_COPY, GRN_DB_TEXT);
@@ -4396,7 +4396,7 @@ grn_obj_set_value(grn_ctx *ctx, grn_obj *obj, grn_id id,
               }
               break;
             case GRN_UVECTOR :
-              rc = grn_ja_put(ctx, (grn_ja *)obj, id, v, s, flags);
+              rc = grn_ja_put(ctx, (grn_ja *)obj, id, v, s, flags, NULL);
               break;
             case GRN_VECTOR :
               rc = grn_ja_putv(ctx, (grn_ja *)obj, id, value, 0);
@@ -5305,7 +5305,7 @@ grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
     remove_columns(ctx, obj);
     grn_obj_close(ctx, obj);
     if (path) {
-      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET);
+      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
       grn_obj_delete_by_id(ctx, db, id, 1);
       grn_pat_remove(ctx, path);
     }
@@ -5316,7 +5316,7 @@ grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
     remove_columns(ctx, obj);
     grn_obj_close(ctx, obj);
     if (path) {
-      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET);
+      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
       grn_obj_delete_by_id(ctx, db, id, 1);
       grn_hash_remove(ctx, path);
     }
@@ -5326,7 +5326,7 @@ grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
     remove_columns(ctx, obj);
     grn_obj_close(ctx, obj);
     if (path) {
-      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET);
+      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
       grn_obj_delete_by_id(ctx, db, id, 1);
       grn_array_remove(ctx, path);
     }
@@ -5336,7 +5336,7 @@ grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
     remove_index(ctx, obj, GRN_HOOK_SET);
     grn_obj_close(ctx, obj);
     if (path) {
-      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET);
+      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
       grn_obj_delete_by_id(ctx, db, id, 1);
       grn_ja_remove(ctx, path);
     }
@@ -5346,7 +5346,7 @@ grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
     remove_index(ctx, obj, GRN_HOOK_SET);
     grn_obj_close(ctx, obj);
     if (path) {
-      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET);
+      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
       grn_obj_delete_by_id(ctx, db, id, 1);
       grn_ra_remove(ctx, path);
     }
@@ -5356,7 +5356,7 @@ grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
     delete_source_hook(ctx, obj);
     grn_obj_close(ctx, obj);
     if (path) {
-      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET);
+      grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
       grn_obj_delete_by_id(ctx, db, id, 1);
       grn_ii_remove(ctx, path);
     }
@@ -5366,7 +5366,7 @@ grn_obj_remove(grn_ctx *ctx, grn_obj *obj)
     if (GRN_DB_OBJP(obj)) {
       grn_obj_close(ctx, obj);
       if (!(id & GRN_OBJ_TMP_OBJECT)) {
-        grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET);
+        grn_ja_put(ctx, ((grn_db *)db)->specs, id, NULL, 0, GRN_OBJ_SET, NULL);
         grn_obj_delete_by_id(ctx, db, id, 1);
       }
       grn_obj_touch(ctx, db, NULL);

  Modified: lib/store.c (+6 -2)
===================================================================
--- lib/store.c    2010-07-28 04:01:41 +0000 (93f64e7)
+++ lib/store.c    2010-07-28 12:45:59 +0000 (0d19950)
@@ -577,6 +577,9 @@ grn_ja_alloc(grn_ctx *ctx, grn_ja *ja, grn_id id,
       }
       *(grn_id *)(addr + pos) = id;
       aligned_size = (element_size + sizeof(grn_id) - 1) & ~(sizeof(grn_id) - 1);
+      if (pos + aligned_size < JA_SEGMENT_SIZE) {
+        *(grn_id *)(addr + pos + aligned_size) = GRN_ID_NIL;
+      }
       SEGMENTS_AT(ja, seg) += aligned_size + sizeof(grn_id);
       pos += sizeof(grn_id);
       EINFO_ENC(einfo, seg, pos, element_size);
@@ -995,7 +998,8 @@ grn_ja_put_lzo(grn_ctx *ctx, grn_ja *ja, grn_id id,
 #endif /* NO_LZO */
 
 grn_rc
-grn_ja_put(grn_ctx *ctx, grn_ja *ja, grn_id id, void *value, uint32_t value_len, int flags)
+grn_ja_put(grn_ctx *ctx, grn_ja *ja, grn_id id, void *value, uint32_t value_len,
+           int flags, void *cas)
 {
 #ifndef NO_ZLIB
   if (ja->header->flags & GRN_OBJ_COMPRESS_ZLIB) {
@@ -1025,7 +1029,7 @@ grn_ja_defrag_seg(grn_ctx *ctx, grn_ja *ja, uint32_t seg)
       element_size = (id & ~DELETED);
     } else {
       element_size = grn_ja_size(ctx, ja, id);
-      if (grn_ja_put(ctx, ja, id, v + sizeof(uint32_t), element_size, GRN_OBJ_SET)) {
+      if (grn_ja_put(ctx, ja, id, v + sizeof(uint32_t), element_size, GRN_OBJ_SET, NULL)) {
         return ctx->rc;
       }
       element_size = (element_size + sizeof(grn_id) - 1) & ~(sizeof(grn_id) - 1);

  Modified: lib/store.h (+1 -1)
===================================================================
--- lib/store.h    2010-07-28 04:01:41 +0000 (947e78e)
+++ lib/store.h    2010-07-28 12:45:59 +0000 (7dd4425)
@@ -95,7 +95,7 @@ grn_rc grn_ja_info(grn_ctx *ctx, grn_ja *ja, unsigned int *max_element_size);
 grn_rc grn_ja_close(grn_ctx *ctx, grn_ja *ja);
 grn_rc grn_ja_remove(grn_ctx *ctx, const char *path);
 grn_rc grn_ja_put(grn_ctx *ctx, grn_ja *ja, grn_id id,
-                  void *value, uint32_t value_len, int flags);
+                  void *value, uint32_t value_len, int flags, void *cas);
 int grn_ja_at(grn_ctx *ctx, grn_ja *ja, grn_id id, void *valbuf, int buf_size);
 
 void *grn_ja_ref(grn_ctx *ctx, grn_ja *ja, grn_id id, grn_io_win *iw, uint32_t *value_len);




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