X-Git-Url: http://git.indexdata.com/?a=blobdiff_plain;f=index%2Frecindex.c;h=5fbbaed4f924092a707eb959eb5aaab4a2946aaf;hb=71647c93775e998a0e602c0371c34e1143d131dd;hp=81e390bce12fdb7352f1ce59d0d4d535c8dc062c;hpb=967d839b42a38836f6ef9ac271f4185460bcb6ea;p=idzebra-moved-to-github.git diff --git a/index/recindex.c b/index/recindex.c index 81e390b..5fbbaed 100644 --- a/index/recindex.c +++ b/index/recindex.c @@ -4,7 +4,16 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: recindex.c,v $ - * Revision 1.27 1999-10-29 10:02:33 adam + * Revision 1.30 2000-07-13 10:14:20 heikki + * Removed compiler warnings when making zebra + * + * Revision 1.29 2000/04/05 09:49:35 adam + * On Unix, zebra/z'mbol uses automake. + * + * Revision 1.28 1999/12/08 22:44:45 adam + * Zebra/Z'mbol dependencies added. + * + * Revision 1.27 1999/10/29 10:02:33 adam * Fixed decompression buffer overflow. * * Revision 1.26 1999/07/06 13:34:57 adam @@ -393,6 +402,7 @@ Records rec_open (BFiles bfs, int rw, int compression_method) p->cache_cur = 0; p->record_cache = (struct record_cache_entry *) xmalloc (sizeof(*p->record_cache)*p->cache_max); + zebra_mutex_init (&p->mutex); return p; } @@ -632,6 +642,7 @@ void rec_close (Records *pp) assert (p); + zebra_mutex_destroy (&p->mutex); rec_cache_flush (p, 0); xfree (p->record_cache); @@ -652,8 +663,7 @@ void rec_close (Records *pp) *pp = NULL; } - -Record rec_get (Records p, int sysno) +static Record rec_get_int (Records p, int sysno) { int i, in_size, r; Record rec, *recp; @@ -662,7 +672,9 @@ Record rec_get (Records p, int sysno) char *nptr, *cptr; char *in_buf = 0; char *bz_buf = 0; +#if HAVE_BZLIB_H int bz_size; +#endif char compression_method; assert (sysno > 0); @@ -788,7 +800,17 @@ Record rec_get (Records p, int sysno) return rec; } -Record rec_new (Records p) +Record rec_get (Records p, int sysno) +{ + Record rec; + zebra_mutex_lock (&p->mutex); + + rec = rec_get_int (p, sysno); + zebra_mutex_unlock (&p->mutex); + return rec; +} + +static Record rec_new_int (Records p) { int sysno, i; Record rec; @@ -805,6 +827,14 @@ Record rec_new (Records p) sysno = p->head.index_free; p->head.index_free = entry.next; } +#if ZMBOL +#else + if (sysno > 100000) + { + logf (LOG_FATAL, "100,000 record limit reached"); + exit (1); + } +#endif (p->head.no_records)++; rec->sysno = sysno; for (i = 0; i < REC_NO_INFO; i++) @@ -816,10 +846,21 @@ Record rec_new (Records p) return rec; } +Record rec_new (Records p) +{ + Record rec; + zebra_mutex_lock (&p->mutex); + + rec = rec_new_int (p); + zebra_mutex_unlock (&p->mutex); + return rec; +} + void rec_del (Records p, Record *recpp) { Record *recp; + zebra_mutex_lock (&p->mutex); (p->head.no_records)--; if ((recp = rec_cache_lookup (p, (*recpp)->sysno, recordFlagDelete))) { @@ -831,6 +872,7 @@ void rec_del (Records p, Record *recpp) rec_cache_insert (p, *recpp, recordFlagDelete); rec_rm (recpp); } + zebra_mutex_unlock (&p->mutex); *recpp = NULL; } @@ -838,6 +880,7 @@ void rec_put (Records p, Record *recpp) { Record *recp; + zebra_mutex_lock (&p->mutex); if ((recp = rec_cache_lookup (p, (*recpp)->sysno, recordFlagWrite))) { rec_rm (recp); @@ -848,6 +891,7 @@ void rec_put (Records p, Record *recpp) rec_cache_insert (p, *recpp, recordFlagWrite); rec_rm (recpp); } + zebra_mutex_unlock (&p->mutex); *recpp = NULL; }