From debf05f862cf4790fd3f574f362004cd88ff6346 Mon Sep 17 00:00:00 2001 From: Heikki Levanto Date: Tue, 1 Jun 2004 14:50:59 +0000 Subject: [PATCH] Fixed a borderline case isamb_forward --- index/extract.c | 6 +++--- index/kinput.c | 5 +++-- isamb/isamb.c | 10 ++++++---- rset/rsisamb.c | 3 ++- 4 files changed, 14 insertions(+), 10 deletions(-) diff --git a/index/extract.c b/index/extract.c index 76c2182..61028b5 100644 --- a/index/extract.c +++ b/index/extract.c @@ -1,4 +1,4 @@ -/* $Id: extract.c,v 1.152 2004-06-01 12:56:14 adam Exp $ +/* $Id: extract.c,v 1.153 2004-06-01 14:50:59 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -1284,9 +1284,9 @@ void extract_flushRecordKeys (ZebraHandle zh, SYSNO sysno, if (zh->reg->key_buf_used + 1024 > (zh->reg->ptr_top -zh->reg->ptr_i)*sizeof(char*)) extract_flushWriteKeys (zh,0); - assert(zh->reg->ptr_i >= 0); + assert(zh->reg->ptr_i >= 0); ++(zh->reg->ptr_i); - assert(zh->reg->ptr_i > 0); + assert(zh->reg->ptr_i > 0); (zh->reg->key_buf)[zh->reg->ptr_top - zh->reg->ptr_i] = (char*)zh->reg->key_buf + zh->reg->key_buf_used; #if SU_SCHEME diff --git a/index/kinput.c b/index/kinput.c index b9d7305..21cb27e 100644 --- a/index/kinput.c +++ b/index/kinput.c @@ -1,4 +1,4 @@ -/* $Id: kinput.c,v 1.57 2004-01-22 15:40:25 heikki Exp $ +/* $Id: kinput.c,v 1.58 2004-06-01 14:50:59 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -363,10 +363,11 @@ static void key_heap_insert (struct heap_info *hi, const char *buf, int nbytes, static int heap_read_one_raw (struct heap_info *hi, char *name, char *key) { ZebraHandle zh=hi->zh; - int ptr_i = zh->reg->ptr_i--; + int ptr_i = zh->reg->ptr_i; char *cp; if (!ptr_i) return 0; + --(zh->reg->ptr_i); cp=(zh->reg->key_buf)[zh->reg->ptr_top - ptr_i]; logf (LOG_DEBUG, " raw: i=%d top=%d cp=%p", ptr_i, zh->reg->ptr_top,cp); strcpy(name, cp); diff --git a/isamb/isamb.c b/isamb/isamb.c index 59d0b26..33a3691 100644 --- a/isamb/isamb.c +++ b/isamb/isamb.c @@ -1,4 +1,4 @@ -/* $Id: isamb.c,v 1.31 2004-06-01 13:46:41 adam Exp $ +/* $Id: isamb.c,v 1.32 2004-06-01 14:51:00 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002,2003,2004 Index Data Aps @@ -27,7 +27,7 @@ Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA #include #ifndef ISAMB_DEBUG -#define ISAMB_DEBUG 0 +#define ISAMB_DEBUG 1 #endif struct ISAMB_head { @@ -1065,7 +1065,7 @@ int isamb_pp_read (ISAMB_PP pp, void *buf) (*pp->isamb->method->code_item)(ISAMC_DECODE, p->decodeClientData, &dst, &src); p->offset = src - (char*) p->bytes; - key_logdump_txt(LOG_DEBUG,buf, "isamb_pp_read returning 1"); + /* key_logdump_txt(LOG_DEBUG,buf, "isamb_pp_read returning 1"); */ return 1; } @@ -1103,6 +1103,7 @@ int isamb_pp_forward (ISAMB_PP pp, void *buf, const void *untilbuf) int item_len; int pos; int nxtpos; + int descending=0; /* used to prevent a border condition error */ if (!p) return 0; #if ISAMB_DEBUG @@ -1114,7 +1115,7 @@ int isamb_pp_forward (ISAMB_PP pp, void *buf, const void *untilbuf) while (1) { - while ( p->offset == p->size) + while ( (p->offset == p->size) && !descending ) { /* end of this block - climb higher */ #if ISAMB_DEBUG logf(LOG_DEBUG,"isamb_pp_forward climbing from l=%d", @@ -1180,6 +1181,7 @@ int isamb_pp_forward (ISAMB_PP pp, void *buf, const void *untilbuf) logf(LOG_DEBUG,"isambb_pp_forward descending l=%d p=%d ", pp->level, pos); #endif + descending=1; /* prevent climbing for a while */ ++(pp->level); p = open_block(pp->isamb,pos); pp->block[pp->level] = p ; diff --git a/rset/rsisamb.c b/rset/rsisamb.c index 0de7cd5..c9579be 100644 --- a/rset/rsisamb.c +++ b/rset/rsisamb.c @@ -1,4 +1,4 @@ -/* $Id: rsisamb.c,v 1.6 2004-06-01 12:32:19 heikki Exp $ +/* $Id: rsisamb.c,v 1.7 2004-06-01 14:51:00 heikki Exp $ Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Index Data Aps @@ -164,6 +164,7 @@ static int r_forward(RSET ct, RSFD rfd, void *buf, int *term_index, key_logdump(LOG_DEBUG, buf); i=isamb_pp_forward(pinfo->pt, buf, untilbuf); + logf (LOG_DEBUG, "rset_rsisamb_forward returning %d",i); return i; } -- 1.7.10.4