[Groonga-commit] groonga/groonga [master] malloc(max_dest_chunk_size * 2) in buffer_flush() #722

Back to archive index

null+****@clear***** null+****@clear*****
2010年 11月 24日 (水) 18:10:40 JST


Daijiro MORI	2010-11-24 09:10:40 +0000 (Wed, 24 Nov 2010)

  New Revision: 14228017dca44e8ff38083324a85e46e5a07031b

  Log:
    malloc(max_dest_chunk_size * 2) in buffer_flush() #722

  Modified files:
    lib/ii.c

  Modified: lib/ii.c (+17 -4)
===================================================================
--- lib/ii.c    2010-11-24 08:29:18 +0000 (d4c67f0)
+++ lib/ii.c    2010-11-24 09:10:40 +0000 (fc9013d)
@@ -2880,7 +2880,7 @@ buffer_flush(grn_ctx *ctx, grn_ii *ii, uint32_t seg, grn_hash *h)
     if (db) {
       uint32_t actual_chunk_size = 0;
       uint32_t max_dest_chunk_size = sb->header.chunk_size + S_SEGMENT;
-      if ((dc = GRN_MALLOC(max_dest_chunk_size))) {
+      if ((dc = GRN_MALLOC(max_dest_chunk_size * 2))) {
         if ((scn = sb->header.chunk) == NOT_ASSIGNED ||
             (sc = WIN_MAP2(ii->chunk, ctx, &sw, scn, 0,
                            sb->header.chunk_size, grn_io_rdonly))) {
@@ -2890,6 +2890,10 @@ buffer_flush(grn_ctx *ctx, grn_ii *ii, uint32_t seg, grn_hash *h)
           db->header.nterms = n;
           if (!(rc = buffer_merge(ctx, ii, seg, h, sb, sc, db, dc))) {
             actual_chunk_size = db->header.chunk_size;
+            if (actual_chunk_size >= max_dest_chunk_size) {
+              GRN_LOG(ctx, GRN_LOG_WARNING, "actual_chunk_size(%d) >= max_dest_chunk_size(%d)",
+                      actual_chunk_size, max_dest_chunk_size);
+            }
             if (!actual_chunk_size || !(rc = chunk_new(ctx, ii, &dcn, actual_chunk_size))) {
               db->header.chunk = actual_chunk_size ? dcn : NOT_ASSIGNED;
               fake_map2(ctx, ii->chunk, &dw, dc, dcn, actual_chunk_size);
@@ -3180,15 +3184,19 @@ buffer_split(grn_ctx *ctx, grn_ii *ii, uint32_t seg, grn_hash *h)
         uint32_t actual_db0_chunk_size = 0;
         uint32_t actual_db1_chunk_size = 0;
         uint32_t max_dest_chunk_size = sb->header.chunk_size + S_SEGMENT;
-        //        uint32_t max_dest_chunk_size = sb->header.chunk_size + S_SEGMENT * 2;
-        if ((dc0 = GRN_MALLOC(max_dest_chunk_size))) {
-          if ((dc1 = GRN_MALLOC(max_dest_chunk_size))) {
+        if ((dc0 = GRN_MALLOC(max_dest_chunk_size * 2))) {
+          if ((dc1 = GRN_MALLOC(max_dest_chunk_size * 2))) {
             if ((scn = sb->header.chunk) == NOT_ASSIGNED ||
                 (sc = WIN_MAP2(ii->chunk, ctx, &sw, scn, 0,
                                sb->header.chunk_size, grn_io_rdonly))) {
               term_split(ctx, ii->lexicon, sb, db0, db1);
               if (!(rc = buffer_merge(ctx, ii, seg, h, sb, sc, db0, dc0))) {
                 actual_db0_chunk_size = db0->header.chunk_size;
+                if (actual_db0_chunk_size >= max_dest_chunk_size) {
+                  GRN_LOG(ctx, GRN_LOG_WARNING,
+                          "actual_db0_chunk_size(%d) >= max_dest_chunk_size(%d)",
+                          actual_db0_chunk_size, max_dest_chunk_size);
+                }
                 if (!actual_db0_chunk_size ||
                     !(rc = chunk_new(ctx, ii, &dcn0, actual_db0_chunk_size))) {
                   db0->header.chunk = actual_db0_chunk_size ? dcn0 : NOT_ASSIGNED;
@@ -3196,6 +3204,11 @@ buffer_split(grn_ctx *ctx, grn_ii *ii, uint32_t seg, grn_hash *h)
                   if (!(rc = grn_io_win_unmap2(&dw0))) {
                     if (!(rc = buffer_merge(ctx, ii, seg, h, sb, sc, db1, dc1))) {
                       actual_db1_chunk_size = db1->header.chunk_size;
+                      if (actual_db1_chunk_size >= max_dest_chunk_size) {
+                        GRN_LOG(ctx, GRN_LOG_WARNING,
+                                "actual_db1_chunk_size(%d) >= max_dest_chunk_size(%d)",
+                                actual_db1_chunk_size, max_dest_chunk_size);
+                      }
                       if (!actual_db1_chunk_size ||
                           !(rc = chunk_new(ctx, ii, &dcn1, actual_db1_chunk_size))) {
                         fake_map2(ctx, ii->chunk, &dw1, dc1, dcn1, actual_db1_chunk_size);




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