aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libibex/ChangeLog5
-rw-r--r--libibex/ibex_block.c8
-rw-r--r--libibex/testindex.c3
3 files changed, 12 insertions, 4 deletions
diff --git a/libibex/ChangeLog b/libibex/ChangeLog
index 7691a94e5c..a47320019f 100644
--- a/libibex/ChangeLog
+++ b/libibex/ChangeLog
@@ -1,3 +1,8 @@
+2001-08-16 Not Zed <NotZed@Ximian.com>
+
+ * ibex_block.c (ibex_use): Use a next pointer so we keep the list
+ intact as we scan it.
+
2001-08-15 Not Zed <NotZed@Ximian.com>
* ibex_block.c (ibex_use): New function to limit use of fd's.
diff --git a/libibex/ibex_block.c b/libibex/ibex_block.c
index ea326949ae..23b225cbc6 100644
--- a/libibex/ibex_block.c
+++ b/libibex/ibex_block.c
@@ -33,7 +33,7 @@ int ibex_opened; /* count of actually opened ibexe's */
/* TODO: return errors? */
static void ibex_use(ibex *ib)
{
- ibex *wb;
+ ibex *wb, *wn;
/* always lock list then ibex */
IBEX_LIST_LOCK(ib);
@@ -66,8 +66,8 @@ static void ibex_use(ibex *ib)
we can't do this first for locking issues */
if (ibex_opened > IBEX_OPEN_THRESHOLD) {
wb = (ibex *)ibex_list.head;
- while (wb->next) {
- wb = wb->next;
+ wn = wb->next;
+ while (wn) {
IBEX_LOCK(wb);
if (wb->usecount == 0 && wb->blocks != NULL) {
o(printf("Forcing close of obex '%s', total = %d\n", wb->name, ibex_opened-1));
@@ -80,6 +80,8 @@ static void ibex_use(ibex *ib)
break;
}
IBEX_UNLOCK(wb);
+ wb = wn;
+ wn = wn->next;
}
}
diff --git a/libibex/testindex.c b/libibex/testindex.c
index acfa892360..064ff1b7ac 100644
--- a/libibex/testindex.c
+++ b/libibex/testindex.c
@@ -223,7 +223,7 @@ int main(int argc, char **argv)
/* random name */
name = words->pdata[word % words->len];
- if (j%1000 == 0) {
+ if (j%1000 == 0 && j>0) {
IBEX_LOCK(ib);
word_index_mem_dump_info(ib->words);
IBEX_UNLOCK(ib);
@@ -284,6 +284,7 @@ int main(int argc, char **argv)
ibex_close(ib);
ib = ibex_open("test.ibex", O_RDWR|O_CREAT, 0600);
+ ibex_contains_name(ib, name);
IBEX_LOCK(ib);
word_index_mem_dump_info(ib->words);
IBEX_UNLOCK(ib);