a3
[idzebra-moved-to-github.git] / isam / memory.c
index 034f6d4..afb7887 100644 (file)
@@ -4,7 +4,17 @@
  * Sebastian Hammer, Adam Dickmeiss
  *
  * $Log: memory.c,v $
- * Revision 1.6  1995-09-04 12:33:47  adam
+ * Revision 1.9  1995-12-06 15:48:46  quinn
+ * Fixed update-problem.
+ *
+ * Revision 1.8  1995/12/06  14:48:27  quinn
+ * Fixed some strange bugs.
+ *
+ * Revision 1.7  1995/12/06  09:59:46  quinn
+ * Fixed memory-consumption bug in memory.c
+ * Added more blocksizes to the default ISAM configuration.
+ *
+ * Revision 1.6  1995/09/04  12:33:47  adam
  * Various cleanup. YAZ util used instead.
  *
  * Revision 1.5  1994/09/28  16:58:33  quinn
@@ -330,7 +340,7 @@ int is_m_peek_record(is_mtable *tab, void *rec)
     return 1;
 }
 
-int is_m_read_record(is_mtable *tab, void *buf)
+int is_m_read_record(is_mtable *tab, void *buf, int keep)
 {
     is_mbuf *mbuf;
 
@@ -343,6 +353,13 @@ int is_m_read_record(is_mtable *tab, void *buf)
     {
        if (!mbuf->next) /* end of mblock */
        {
+           if (!keep && tab->cur_mblock->state == IS_MBSTATE_CLEAN &&
+               tab->cur_mblock->diskpos > 0)
+           {
+               xfree_mbufs(tab->cur_mblock->data);
+               tab->cur_mblock->data = 0;
+               tab->cur_mblock->state = IS_MBSTATE_UNREAD;
+           }
            if (tab->cur_mblock->next)
            {
                tab->cur_mblock = tab->cur_mblock->next;
@@ -374,7 +391,7 @@ int is_m_seek_record(is_mtable *tab, const void *rec)
 
     for (;;)
     {
-       if (is_m_read_record(tab, &peek) <= 0)
+       if (is_m_read_record(tab, &peek, 1) <= 0)
            return 1;
        if ((rs = (*tab->is->cmp)(peek, rec)) > 0)
        {