Get rid of unsed variable active in struct zebra_register.
authorAdam Dickmeiss <adam@indexdata.dk>
Sun, 26 Mar 2006 14:17:01 +0000 (14:17 +0000)
committerAdam Dickmeiss <adam@indexdata.dk>
Sun, 26 Mar 2006 14:17:01 +0000 (14:17 +0000)
Avoid use of exit in recindex functions.. Use ZEBRA_OK/ZEBRA_FAIL
signal instead.

index/index.h
index/recindex.c
index/recindex.h
index/zebraapi.c
index/zinfo.c

index 164d195..a716601 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: index.h,v 1.156 2006-03-23 09:15:25 adam Exp $
+/* $Id: index.h,v 1.157 2006-03-26 14:17:01 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -217,7 +217,6 @@ struct zebra_register {
     int seqno;
     int last_val;
     int stop_flag;
-    int active; /* 0=shutdown, 1=enabled and inactive, 2=activated */
 
     zebra_rec_keys_t keys;
 
index 3991171..bef5034 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: recindex.c,v 1.46 2005-08-22 08:18:43 adam Exp $
+/* $Id: recindex.c,v 1.47 2006-03-26 14:17:01 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -73,7 +73,7 @@ SYSNO rec_sysno_to_int(SYSNO sysno)
     return sysno - FAKE_OFFSET;
 }
 
-static void rec_write_head(Records p)
+static ZEBRA_RES rec_write_head(Records p)
 {
     int r;
 
@@ -84,8 +84,9 @@ static void rec_write_head(Records p)
     if (r)
     {
         yaz_log(YLOG_FATAL|YLOG_ERRNO, "write head of %s", p->index_fname);
-        exit(1);
+       return ZEBRA_FAIL;
     }
+    return ZEBRA_OK;
 }
 
 static void rec_tmp_expand(Records p, int size)
@@ -118,8 +119,7 @@ static int read_indx(Records p, SYSNO sysno, void *buf, int itemsize,
     if (r != 1 && !ignoreError)
     {
         yaz_log(YLOG_FATAL|YLOG_ERRNO, "read in %s at pos %ld",
-              p->index_fname, (long) pos);
-        exit(1);
+               p->index_fname, (long) pos);
     }
     return r;
 }
@@ -139,7 +139,7 @@ static void write_indx(Records p, SYSNO sysno, void *buf, int itemsize)
                (char*) buf + sz1);
 }
 
-static void rec_release_blocks(Records p, SYSNO sysno)
+static ZEBRA_RES rec_release_blocks(Records p, SYSNO sysno)
 {
     struct record_index_entry entry;
     zint freeblock;
@@ -148,7 +148,7 @@ static void rec_release_blocks(Records p, SYSNO sysno)
     int first = 1;
 
     if (read_indx(p, sysno, &entry, sizeof(entry), 1) != 1)
-        return ;
+        return ZEBRA_FAIL;
 
     freeblock = entry.next;
     assert(freeblock > 0);
@@ -162,7 +162,7 @@ static void rec_release_blocks(Records p, SYSNO sysno)
                     block_and_ref) != 1)
         {
             yaz_log(YLOG_FATAL|YLOG_ERRNO, "read in rec_del_single");
-            exit(1);
+           return ZEBRA_FAIL;
         }
        if (first)
        {
@@ -176,9 +176,9 @@ static void rec_release_blocks(Records p, SYSNO sysno)
                              sizeof(block_and_ref), block_and_ref))
                {
                    yaz_log(YLOG_FATAL|YLOG_ERRNO, "write in rec_del_single");
-                   exit(1);
+                   return ZEBRA_FAIL;
                }
-               return;
+               return ZEBRA_OK;
            }
            first = 0;
        }
@@ -187,7 +187,7 @@ static void rec_release_blocks(Records p, SYSNO sysno)
                       &p->head.block_free[dst_type]))
         {
             yaz_log(YLOG_FATAL|YLOG_ERRNO, "write in rec_del_single");
-            exit(1);
+           return ZEBRA_FAIL;
         }
         p->head.block_free[dst_type] = freeblock;
         memcpy(&freeblock, block_and_ref, sizeof(freeblock));
@@ -195,21 +195,24 @@ static void rec_release_blocks(Records p, SYSNO sysno)
         p->head.block_used[dst_type]--;
     }
     p->head.total_bytes -= entry.size;
+    return ZEBRA_OK;
 }
 
-static void rec_delete_single(Records p, Record rec)
+static ZEBRA_RES rec_delete_single(Records p, Record rec)
 {
     struct record_index_entry entry;
 
-    rec_release_blocks(p, rec_sysno_to_int(rec->sysno));
+    if (rec_release_blocks(p, rec_sysno_to_int(rec->sysno)) != ZEBRA_OK)
+       return ZEBRA_FAIL;
 
     entry.next = p->head.index_free;
     entry.size = 0;
     p->head.index_free = rec_sysno_to_int(rec->sysno);
     write_indx(p, rec_sysno_to_int(rec->sysno), &entry, sizeof(entry));
+    return ZEBRA_OK;
 }
 
-static void rec_write_tmp_buf(Records p, int size, SYSNO *sysnos)
+static ZEBRA_RES rec_write_tmp_buf(Records p, int size, SYSNO *sysnos)
 {
     struct record_index_entry entry;
     int no_written = 0;
@@ -233,7 +236,7 @@ static void rec_write_tmp_buf(Records p, int size, SYSNO *sysnos)
                 yaz_log(YLOG_FATAL|YLOG_ERRNO, "read in %s at free block "
                         ZINT_FORMAT,
                         p->data_fname[dst_type], block_free);
-               exit(1);
+               return ZEBRA_FAIL;
             }
         }
         else
@@ -264,6 +267,7 @@ static void rec_write_tmp_buf(Records p, int size, SYSNO *sysnos)
     memcpy(cptr, &block_free, sizeof(block_free));
     bf_write(p->data_BFile[dst_type], block_prev, 0,
               sizeof(block_free) + (p->tmp_buf+size) - cptr, cptr);
+    return ZEBRA_OK;
 }
 
 Records rec_open(BFiles bfs, int rw, int compression_method)
@@ -271,19 +275,21 @@ Records rec_open(BFiles bfs, int rw, int compression_method)
     Records p;
     int i, r;
     int version;
+    ZEBRA_RES ret = ZEBRA_OK;
 
     p = (Records) xmalloc(sizeof(*p));
     p->compression_method = compression_method;
     p->rw = rw;
     p->tmp_size = 1024;
-    p->tmp_buf = (char *) xmalloc(p->tmp_size);
     p->index_fname = "reci";
     p->index_BFile = bf_open(bfs, p->index_fname, RIDX_CHUNK, rw);
     if (p->index_BFile == NULL)
     {
         yaz_log(YLOG_FATAL|YLOG_ERRNO, "open %s", p->index_fname);
-        exit(1);
+       xfree(p);
+       return 0;
     }
+    p->tmp_buf = (char *) xmalloc(p->tmp_size);
     r = bf_read(p->index_BFile, 0, 0, 0, p->tmp_buf);
     switch (r)
     {
@@ -308,21 +314,24 @@ Records rec_open(BFiles bfs, int rw, int compression_method)
             p->head.block_move[i] = p->head.block_size[i] * 24;
         }
         if (rw)
-            rec_write_head(p);
+       {
+            if (rec_write_head(p) != ZEBRA_OK)
+               ret = ZEBRA_FAIL;
+       }
         break;
     case 1:
         memcpy(&p->head, p->tmp_buf, sizeof(p->head));
         if (memcmp(p->head.magic, REC_HEAD_MAGIC, sizeof(p->head.magic)))
         {
             yaz_log(YLOG_FATAL, "file %s has bad format", p->index_fname);
-            exit(1);
+           ret = ZEBRA_FAIL;
         }
        version = atoi(p->head.version);
        if (version != REC_VERSION)
        {
            yaz_log(YLOG_FATAL, "file %s is version %d, but version"
                  " %d is required", p->index_fname, version, REC_VERSION);
-           exit(1);
+           ret = ZEBRA_FAIL;
        }
         break;
     }
@@ -341,7 +350,7 @@ Records rec_open(BFiles bfs, int rw, int compression_method)
                                         rw)))
         {
             yaz_log(YLOG_FATAL|YLOG_ERRNO, "bf_open %s", p->data_fname[i]);
-            exit(1);
+           ret = ZEBRA_FAIL;
         }
     }
     p->cache_max = 400;
@@ -349,6 +358,8 @@ Records rec_open(BFiles bfs, int rw, int compression_method)
     p->record_cache = (struct record_cache_entry *)
        xmalloc(sizeof(*p->record_cache)*p->cache_max);
     zebra_mutex_init(&p->mutex);
+    if (ret == ZEBRA_FAIL)
+       rec_close(&p);
     return p;
 }
 
@@ -462,7 +473,7 @@ static void rec_cache_flush_block1(Records p, Record rec, Record last_rec,
     }
 }
 
-static void rec_write_multiple(Records p, int saveCount)
+static ZEBRA_RES rec_write_multiple(Records p, int saveCount)
 {
     int i;
     short ref_count = 0;
@@ -473,6 +484,7 @@ static void rec_write_multiple(Records p, int saveCount)
     char *out_buf = (char *) xmalloc(out_size);
     SYSNO *sysnos = (SYSNO *) xmalloc(sizeof(*sysnos) * (p->cache_cur + 1));
     SYSNO *sysnop = sysnos;
+    ZEBRA_RES ret = ZEBRA_OK;
 
     for (i = 0; i<p->cache_cur - saveCount; i++)
     {
@@ -488,7 +500,10 @@ static void rec_write_multiple(Records p, int saveCount)
            last_rec = e->rec;
             break;
         case recordFlagWrite:
-           rec_release_blocks(p, rec_sysno_to_int(e->rec->sysno));
+           if (rec_release_blocks(p, rec_sysno_to_int(e->rec->sysno))
+               != ZEBRA_OK)
+               ret = ZEBRA_FAIL;
+
             rec_cache_flush_block1(p, e->rec, last_rec, &out_buf,
                                    &out_size, &out_offset);
            *sysnop++ = rec_sysno_to_int(e->rec->sysno);
@@ -497,7 +512,9 @@ static void rec_write_multiple(Records p, int saveCount)
            last_rec = e->rec;
             break;
         case recordFlagDelete:
-            rec_delete_single(p, e->rec);
+            if (rec_delete_single(p, e->rec) != ZEBRA_OK)
+               ret = ZEBRA_FAIL;
+
            e->flag = recordFlagNop;
             break;
        default:
@@ -551,20 +568,24 @@ static void rec_write_multiple(Records p, int saveCount)
                &compression_method, sizeof(compression_method));
                
        /* -------- compression */
-       rec_write_tmp_buf(p, csize + sizeof(short) + sizeof(char), sysnos);
+       if (rec_write_tmp_buf(p, csize + sizeof(short) + sizeof(char), sysnos)
+           != ZEBRA_OK)
+           ret = ZEBRA_FAIL;
     }
     xfree(out_buf);
     xfree(sysnos);
+    return ret;
 }
 
-static void rec_cache_flush(Records p, int saveCount)
+static ZEBRA_RES rec_cache_flush(Records p, int saveCount)
 {
     int i, j;
+    ZEBRA_RES ret;
 
     if (saveCount >= p->cache_cur)
         saveCount = 0;
 
-    rec_write_multiple(p, saveCount);
+    ret = rec_write_multiple(p, saveCount);
 
     for (i = 0; i<p->cache_cur - saveCount; i++)
     {
@@ -576,6 +597,7 @@ static void rec_cache_flush(Records p, int saveCount)
         memcpy(p->record_cache+j, p->record_cache+i,
                 sizeof(*p->record_cache));
     p->cache_cur = saveCount;
+    return ret;
 }
 
 static Record *rec_cache_lookup(Records p, SYSNO sysno,
@@ -595,12 +617,13 @@ static Record *rec_cache_lookup(Records p, SYSNO sysno,
     return NULL;
 }
 
-static void rec_cache_insert(Records p, Record rec, enum recordCacheFlag flag)
+static ZEBRA_RES rec_cache_insert(Records p, Record rec, enum recordCacheFlag flag)
 {
     struct record_cache_entry *e;
+    ZEBRA_RES ret = ZEBRA_OK;
 
     if (p->cache_cur == p->cache_max)
-        rec_cache_flush(p, 1);
+        ret = rec_cache_flush(p, 1);
     else if (p->cache_cur > 0)
     {
         int i, j;
@@ -612,28 +635,36 @@ static void rec_cache_insert(Records p, Record rec, enum recordCacheFlag flag)
                 used += r->size[j];
         }
         if (used > 90000)
-            rec_cache_flush(p, 1);
+            ret = rec_cache_flush(p, 1);
     }
     assert(p->cache_cur < p->cache_max);
 
     e = p->record_cache + (p->cache_cur)++;
     e->flag = flag;
     e->rec = rec_cp(rec);
+    return ret;
 }
 
-void rec_close(Records *pp)
+ZEBRA_RES rec_close(Records *pp)
 {
     Records p = *pp;
     int i;
+    ZEBRA_RES ret = ZEBRA_OK;
 
-    assert(p);
+    if (!p)
+       return ret;
 
     zebra_mutex_destroy(&p->mutex);
-    rec_cache_flush(p, 0);
+    if (rec_cache_flush(p, 0) != ZEBRA_OK)
+       ret = ZEBRA_FAIL;
+
     xfree(p->record_cache);
 
     if (p->rw)
-        rec_write_head(p);
+    {
+        if (rec_write_head(p) != ZEBRA_OK)
+           ret = ZEBRA_FAIL;
+    }
 
     if (p->index_BFile)
         bf_close(p->index_BFile);
@@ -647,6 +678,7 @@ void rec_close(Records *pp)
     xfree(p->tmp_buf);
     xfree(p);
     *pp = NULL;
+    return ret;
 }
 
 static Record rec_get_int(Records p, SYSNO sysno)
@@ -735,7 +767,7 @@ static Record rec_get_int(Records p, SYSNO sysno)
        in_size = bz_size;
 #else
        yaz_log(YLOG_FATAL, "cannot decompress record(s) in BZIP2 format");
-       exit(1);
+       return 0;
 #endif
        break;
     case REC_COMPRESS_NONE:
@@ -789,7 +821,8 @@ static Record rec_get_int(Records p, SYSNO sysno)
        }
     }
     xfree(bz_buf);
-    rec_cache_insert(p, rec, recordFlagNop);
+    if (rec_cache_insert(p, rec, recordFlagNop) != ZEBRA_OK)
+       return 0;
     return rec;
 }
 
@@ -822,7 +855,11 @@ static Record rec_new_int(Records p)
     {
         struct record_index_entry entry;
 
-        read_indx(p, p->head.index_free, &entry, sizeof(entry), 0);
+        if (read_indx(p, p->head.index_free, &entry, sizeof(entry), 0) < 1)
+       {
+           xfree(rec);
+           return 0;
+       }
         sysno = p->head.index_free;
         p->head.index_free = entry.next;
     }
@@ -847,9 +884,10 @@ Record rec_new(Records p)
     return rec;
 }
 
-void rec_del(Records p, Record *recpp)
+ZEBRA_RES rec_del(Records p, Record *recpp)
 {
     Record *recp;
+    ZEBRA_RES ret = ZEBRA_OK;
 
     zebra_mutex_lock(&p->mutex);
     (p->head.no_records)--;
@@ -860,16 +898,18 @@ void rec_del(Records p, Record *recpp)
     }
     else
     {
-        rec_cache_insert(p, *recpp, recordFlagDelete);
+        ret = rec_cache_insert(p, *recpp, recordFlagDelete);
         rec_rm(recpp);
     }
     zebra_mutex_unlock(&p->mutex);
     *recpp = NULL;
+    return ret;
 }
 
-void rec_put(Records p, Record *recpp)
+ZEBRA_RES rec_put(Records p, Record *recpp)
 {
     Record *recp;
+    ZEBRA_RES ret = ZEBRA_OK;
 
     zebra_mutex_lock(&p->mutex);
     if ((recp = rec_cache_lookup(p, (*recpp)->sysno, recordFlagWrite)))
@@ -879,11 +919,12 @@ void rec_put(Records p, Record *recpp)
     }
     else
     {
-        rec_cache_insert(p, *recpp, recordFlagWrite);
+        ret = rec_cache_insert(p, *recpp, recordFlagWrite);
         rec_rm(recpp);
     }
     zebra_mutex_unlock(&p->mutex);
     *recpp = NULL;
+    return ret;
 }
 
 void rec_rm(Record *recpp)
index 371fc6d..0e6f2a6 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: recindex.h,v 1.25 2005-08-09 12:30:46 adam Exp $
+/* $Id: recindex.h,v 1.26 2006-03-26 14:17:01 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -44,13 +44,13 @@ typedef struct record_info {
 typedef struct records_info *Records;
 
 Record rec_cp(Record rec);
-void rec_del(Records p, Record *recpp);
+ZEBRA_RES rec_del(Records p, Record *recpp);
 void rec_rm(Record *recpp);
-void rec_put(Records p, Record *recpp);
+ZEBRA_RES rec_put(Records p, Record *recpp);
 Record rec_new(Records p);
 Record rec_get(Records p, SYSNO sysno);
 Record rec_get_root(Records p);
-void rec_close (Records *p);
+ZEBRA_RES rec_close (Records *p);
 Records rec_open(BFiles bfs, int rw, int compression_method);
 char *rec_strdup(const char *s, size_t *len);
 void rec_prstat(Records p);
index b036ff1..3296732 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zebraapi.c,v 1.205 2006-03-25 15:33:29 adam Exp $
+/* $Id: zebraapi.c,v 1.206 2006-03-26 14:17:01 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -84,7 +84,7 @@ static struct zebra_register *zebra_register_open(ZebraService zs,
                                                  int rw, int useshadow,
                                                  Res res,
                                                  const char *reg_path);
-static void zebra_register_close (ZebraService zs, struct zebra_register *reg);
+static void zebra_register_close(ZebraService zs, struct zebra_register *reg);
 
 ZebraHandle zebra_open(ZebraService zs, Res res)
 {
@@ -280,6 +280,7 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name,
     const char *recordCompression = 0;
     const char *profilePath;
     char cwd[1024];
+    ZEBRA_RES ret = ZEBRA_OK;
 
     ASSERTZS;
     
@@ -378,7 +379,7 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name,
     if (!(reg->records = rec_open (reg->bfs, rw, record_compression)))
     {
        yaz_log (YLOG_WARN, "rec_open failed");
-       return 0;
+       ret = ZEBRA_FAIL;
     }
     if (rw)
     {
@@ -387,12 +388,12 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name,
     if (!(reg->dict = dict_open_res (reg->bfs, FNAME_DICT, 40, rw, 0, res)))
     {
        yaz_log (YLOG_WARN, "dict_open failed");
-       return 0;
+       ret = ZEBRA_FAIL;
     }
     if (!(reg->sortIdx = sortIdx_open (reg->bfs, rw)))
     {
        yaz_log (YLOG_WARN, "sortIdx_open failed");
-       return 0;
+       ret = ZEBRA_FAIL;
     }
     if (res_get_match (res, "isam", "s", ISAM_DEFAULT))
     {
@@ -401,7 +402,7 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name,
                                      key_isams_m(res, &isams_m))))
        {
            yaz_log (YLOG_WARN, "isams_open failed");
-           return 0;
+           ret = ZEBRA_FAIL;
        }
     }
     if (res_get_match (res, "isam", "c", ISAM_DEFAULT))
@@ -411,7 +412,7 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name,
                                    rw, key_isamc_m(res, &isamc_m))))
        {
            yaz_log (YLOG_WARN, "isamc_open failed");
-           return 0;
+           ret = ZEBRA_FAIL;
        }
     }
     if (res_get_match (res, "isam", "b", ISAM_DEFAULT))
@@ -422,7 +423,7 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name,
                                        rw, key_isamc_m(res, &isamc_m), 0)))
        {
            yaz_log (YLOG_WARN, "isamb_open failed");
-           return 0;
+           ret = ZEBRA_FAIL;
        }
     }
     if (res_get_match (res, "isam", "bc", ISAM_DEFAULT))
@@ -433,7 +434,7 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name,
                                        rw, key_isamc_m(res, &isamc_m), 1)))
        {
            yaz_log (YLOG_WARN, "isamb_open failed");
-           return 0;
+           ret = ZEBRA_FAIL;
        }
     }
     if (res_get_match (res, "isam", "null", ISAM_DEFAULT))
@@ -444,19 +445,26 @@ struct zebra_register *zebra_register_open(ZebraService zs, const char *name,
                                        rw, key_isamc_m(res, &isamc_m), -1)))
        {
            yaz_log (YLOG_WARN, "isamb_open failed");
-           return 0;
+           ret = ZEBRA_FAIL;
        }
     }
-    reg->zei = zebraExplain_open (reg->records, reg->dh,
-                                  res, rw, reg,
-                                  explain_extract);
-    if (!reg->zei)
+    if (reg->records)
+    {
+       reg->zei = zebraExplain_open(reg->records, reg->dh,
+                                    res, rw, reg,
+                                    explain_extract);
+       if (!reg->zei)
+       {
+           yaz_log (YLOG_WARN, "Cannot obtain EXPLAIN information");
+           ret = ZEBRA_FAIL;
+       }
+    }
+    
+    if (ret != ZEBRA_OK)
     {
-       yaz_log (YLOG_WARN, "Cannot obtain EXPLAIN information");
+       zebra_register_close(zs, reg);
        return 0;
     }
-
-    reg->active = 2;
     yaz_log (YLOG_DEBUG, "zebra_register_open ok p=%p", reg);
     return reg;
 }
@@ -483,28 +491,26 @@ ZEBRA_RES zebra_admin_start (ZebraHandle zh)
     return ZEBRA_OK;
 }
 
-static void zebra_register_close (ZebraService zs, struct zebra_register *reg)
+static void zebra_register_close(ZebraService zs, struct zebra_register *reg)
 {
     ASSERTZS;
     assert(reg);
     yaz_log(YLOG_DEBUG, "zebra_register_close p=%p", reg);
     reg->stop_flag = 0;
     zebra_chdir (zs);
-    if (reg->records)
-    {
-        zebraExplain_close (reg->zei);
-        dict_close (reg->dict);
-        if (reg->matchDict)
-            dict_close (reg->matchDict);
-       sortIdx_close (reg->sortIdx);
-       if (reg->isams)
-           isams_close (reg->isams);
-        if (reg->isamc)
-            isamc_close (reg->isamc);
-        if (reg->isamb)
-            isamb_close (reg->isamb);
-        rec_close (&reg->records);
-    }
+    
+    zebraExplain_close (reg->zei);
+    dict_close (reg->dict);
+    if (reg->matchDict)
+       dict_close (reg->matchDict);
+    sortIdx_close (reg->sortIdx);
+    if (reg->isams)
+       isams_close (reg->isams);
+    if (reg->isamc)
+       isamc_close (reg->isamc);
+    if (reg->isamb)
+       isamb_close (reg->isamb);
+    rec_close (&reg->records);
 
     recTypes_destroy (reg->recTypes);
     zebra_maps_close (reg->zebra_maps);
@@ -564,7 +570,7 @@ ZEBRA_RES zebra_close (ZebraHandle zh)
     resultSetDestroy (zh, -1, 0, 0);
 
     if (zh->reg)
-        zebra_register_close (zh->service, zh->reg);
+        zebra_register_close(zh->service, zh->reg);
     zebra_close_res (zh);
     res_close(zh->session_res);
 
@@ -666,7 +672,7 @@ static void zebra_select_register (ZebraHandle zh, const char *new_reg)
         if (zh->reg)
         {
             resultSetInvalidate (zh);
-            zebra_register_close (zh->service, zh->reg);
+            zebra_register_close(zh->service, zh->reg);
             zh->reg = 0;
         }
         zebra_close_res(zh);
@@ -1628,7 +1634,7 @@ ZEBRA_RES zebra_begin_trans(ZebraHandle zh, int rw)
         if (zh->reg)
        {
             resultSetInvalidate (zh);
-            zebra_register_close (zh->service, zh->reg);
+            zebra_register_close(zh->service, zh->reg);
        }
         zh->trans_w_no = zh->trans_no;
 
@@ -1770,7 +1776,7 @@ ZEBRA_RES zebra_begin_trans(ZebraHandle zh, int rw)
         if (zh->reg)
        {
             resultSetInvalidate (zh);
-            zebra_register_close (zh->service, zh->reg);
+            zebra_register_close(zh->service, zh->reg);
        }
         zh->reg = zebra_register_open(zh->service, zh->reg_name,
                                       0, val == 'c' ? 1 : 0,
@@ -1846,7 +1852,7 @@ ZEBRA_RES zebra_end_transaction (ZebraHandle zh, ZebraTransactionStatus *status)
         
         resultSetInvalidate (zh);
 
-        zebra_register_close (zh->service, zh->reg);
+        zebra_register_close(zh->service, zh->reg);
         zh->reg = 0;
         
         yaz_log (YLOG_LOG, "Records: "ZINT_FORMAT" i/u/d "
index b474306..7a7e097 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: zinfo.c,v 1.55 2006-02-20 12:41:42 adam Exp $
+/* $Id: zinfo.c,v 1.56 2006-03-26 14:17:01 adam Exp $
    Copyright (C) 1995-2005
    Index Data ApS
 
@@ -150,11 +150,15 @@ static Record createRecord(Records records, SYSNO *sysno)
     if (*sysno)
     {
        rec = rec_get(records, *sysno);
+       if (!rec)
+           return 0;
        xfree(rec->info[recInfo_storeData]);
     }
     else
     {
        rec = rec_new(records);
+       if (!rec)
+           return 0;
        *sysno = rec->sysno;
        
        rec->info[recInfo_fileType] =
@@ -520,6 +524,12 @@ ZebraExplainInfo zebraExplain_open(
 
            /* write now because we want to be sure about the sysno */
            trec = rec_new(records);
+           if (!trec)
+           {
+               yaz_log(YLOG_FATAL, "Cannot create root Explain record");
+               nmem_destroy(zei->nmem);
+               return 0;
+           }
            trec->info[recInfo_fileType] =
                rec_strdup("grs.sgml", &trec->size[recInfo_fileType]);
            trec->info[recInfo_databaseName] =
@@ -529,11 +539,11 @@ ZebraExplainInfo zebraExplain_open(
            trec->info[recInfo_storeData] = (char *) xmalloc(sgml_len);
            memcpy(trec->info[recInfo_storeData], sgml_buf, sgml_len);
            trec->size[recInfo_storeData] = sgml_len;
-           
+               
            rec_put(records, &trec);
            rec_rm(&trec);
-
        }
+       
        zebraExplain_newDatabase(zei, "IR-Explain-1", 0);
            
        if (!zei->categoryList->dirty)
@@ -986,6 +996,8 @@ static void zebraExplain_writeCategoryList (ZebraExplainInfo zei,
 #endif
 
     drec = createRecord (zei->records, &sysno);
+    if (!drec)
+       return;
     
     node_ci = data1_search_tag (zei->dh, node_categoryList,
                                "/categoryList");
@@ -1040,6 +1052,8 @@ static void zebraExplain_writeAttributeDetails (ZebraExplainInfo zei,
 #endif
 
     drec = createRecord (zei->records, &zad->sysno);
+    if (!drec)
+       return;
     assert (zad->data1_tree);
 
     node_adinfo = data1_search_tag (zei->dh, zad->data1_tree,
@@ -1182,6 +1196,8 @@ static void zebraExplain_writeDatabase (ZebraExplainInfo zei,
     yaz_log(YLOG_LOG, "zebraExplain_writeDatabase %s", zdi->databaseName);
 #endif
     drec = createRecord (zei->records, &zdi->sysno);
+    if (!drec)
+       return;
     assert (zdi->data1_database);
 
     node_dbinfo = data1_search_tag (zei->dh, zdi->data1_database,
@@ -1272,6 +1288,8 @@ static void zebraExplain_writeAttributeSet (ZebraExplainInfo zei,
 #endif
 
     drec = createRecord (zei->records, &o->sysno);
+    if (!drec)
+       return;
     node_root =
        data1_read_sgml (zei->dh, zei->nmem,
                         "<explain><attributeSetInfo>AttributeSetInfo\n"