X-Git-Url: http://sru.miketaylor.org.uk/?a=blobdiff_plain;f=index%2Frecindex.c;h=29006d793bdc3f55f3726618cfef0b3166ebf1fc;hb=69da23537c6bb71ab948e079708bf8ea090de73f;hp=81e390bce12fdb7352f1ce59d0d4d535c8dc062c;hpb=967d839b42a38836f6ef9ac271f4185460bcb6ea;p=idzebra-moved-to-github.git diff --git a/index/recindex.c b/index/recindex.c index 81e390b..29006d7 100644 --- a/index/recindex.c +++ b/index/recindex.c @@ -4,7 +4,13 @@ * Sebastian Hammer, Adam Dickmeiss * * $Log: recindex.c,v $ - * Revision 1.27 1999-10-29 10:02:33 adam + * 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 +399,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 +639,7 @@ void rec_close (Records *pp) assert (p); + zebra_mutex_destroy (&p->mutex); rec_cache_flush (p, 0); xfree (p->record_cache); @@ -652,8 +660,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; @@ -788,7 +795,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 +822,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 +841,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 +867,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 +875,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 +886,7 @@ void rec_put (Records p, Record *recpp) rec_cache_insert (p, *recpp, recordFlagWrite); rec_rm (recpp); } + zebra_mutex_unlock (&p->mutex); *recpp = NULL; }