[Groonga-commit] groonga/groonga at d0106b4 [master] ii: add missing reused check

Back to archive index

Kouhei Sutou null+****@clear*****
Thu Jan 26 07:28:53 JST 2017


Kouhei Sutou	2017-01-26 07:28:53 +0900 (Thu, 26 Jan 2017)

  New Revision: d0106b41c418ddd8354092850ac6cc012a0bd4af
  https://github.com/groonga/groonga/commit/d0106b41c418ddd8354092850ac6cc012a0bd4af

  Merged 938ab9e: Merge pull request #632 from groonga/ii-add-reused-check

  Message:
    ii: add missing reused check

  Modified files:
    lib/ii.c

  Modified: lib/ii.c (+25 -3)
===================================================================
--- lib/ii.c    2017-01-25 23:43:16 +0900 (70eb896)
+++ lib/ii.c    2017-01-26 07:28:53 +0900 (ebef89e)
@@ -5135,6 +5135,25 @@ grn_ii_cursor_next_internal(grn_ctx *ctx, grn_ii_cursor *c,
               if (c->curr_chunk == c->nchunks) {
                 if (c->cp < c->cpe) {
                   grn_p_decv(ctx, c->cp, c->cpe - c->cp, c->rdv, c->ii->n_elements);
+                  if (buffer_is_reused(ctx, c->ii, c)) {
+                    GRN_LOG(ctx, GRN_LOG_WARNING,
+                            "[ii][cursor][next][chunk][last] "
+                            "buffer is reused by another thread: %p",
+                            c);
+                    c->pc.rid = 0;
+                    break;
+                  }
+                  if (chunk_is_reused(ctx, c->ii, c,
+                                      c->buf->header.chunk,
+                                      c->buf->header.chunk_size)) {
+                    GRN_LOG(ctx, GRN_LOG_WARNING,
+                            "[ii][cursor][next][chunk][last] "
+                            "chunk(%d) is reused by another thread: %p",
+                            c->buf->header.chunk,
+                            c);
+                    c->pc.rid = 0;
+                    break;
+                  }
                 } else {
                   c->pc.rid = 0;
                   break;
@@ -5151,7 +5170,7 @@ grn_ii_cursor_next_internal(grn_ctx *ctx, grn_ii_cursor *c,
                   if (chunk_is_reused(ctx, c->ii, c,
                                       c->cinfo[c->curr_chunk].segno, size)) {
                     GRN_LOG(ctx, GRN_LOG_WARNING,
-                            "[ii][cursor] "
+                            "[ii][cursor][chunk] "
                             "chunk(%d) is reused by another thread: %p",
                             c->cinfo[c->curr_chunk].segno,
                             c);
@@ -5195,8 +5214,11 @@ grn_ii_cursor_next_internal(grn_ctx *ctx, grn_ii_cursor *c,
             uint32_t lrid = c->pb.rid, lsid = c->pb.sid; /* for check */
             buffer_rec *br = BUFFER_REC_AT(c->buf, c->nextb);
             if (buffer_is_reused(ctx, c->ii, c)) {
-              GRN_LOG(ctx, GRN_LOG_DEBUG, "buffer reused(%d,%d)",
-                      c->buffer_pseg, *c->ppseg);
+              GRN_LOG(ctx, GRN_LOG_WARNING,
+                      "[ii][cursor][buffer] "
+                      "buffer(%d,%d) is reused by another thread: %p",
+                      c->buffer_pseg, *c->ppseg,
+                      c);
               // todo : rewind;
             }
             c->bp = GRN_NEXT_ADDR(br);
-------------- next part --------------
HTML����������������������������...
다운로드 



More information about the Groonga-commit mailing list
Back to archive index