From: wessels <> Date: Wed, 27 May 1998 01:08:54 +0000 (+0000) Subject: re-fix event spin problems X-Git-Tag: SQUID_3_0_PRE1~3253 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c43f524766be3f427686d3b757f2db725edc73c1;p=thirdparty%2Fsquid.git re-fix event spin problems --- diff --git a/src/event.cc b/src/event.cc index b01d5e03c7..096a1a4b66 100644 --- a/src/event.cc +++ b/src/event.cc @@ -1,6 +1,6 @@ /* - * $Id: event.cc,v 1.18 1998/05/26 17:37:23 wessels Exp $ + * $Id: event.cc,v 1.19 1998/05/26 19:08:54 wessels Exp $ * * DEBUG: section 41 Event Processing * AUTHOR: Henrik Nordstrom @@ -39,22 +39,24 @@ struct ev_entry { double when; struct ev_entry *next; int weight; + int id; }; static struct ev_entry *tasks = NULL; static OBJH eventDump; +static int run_id = 0; void eventAdd(const char *name, EVH * func, void *arg, double when, int weight) { struct ev_entry *event = xcalloc(1, sizeof(struct ev_entry)); struct ev_entry **E; - assert(when > 0.0); event->func = func; event->arg = arg; event->name = name; event->when = current_dtime + when; event->weight = weight; + event->id = run_id; if (NULL != arg) cbdataLock(arg); debug(41, 7) ("eventAdd: Adding '%s', in %f seconds\n", name, when); @@ -108,11 +110,19 @@ eventRun(void) EVH *func; void *arg; int weight = 0; - while (0 == weight) { - if ((event = tasks) == NULL) - break; + if (NULL == tasks) + return; + if (tasks->when > current_dtime) + return; + run_id++; + debug(41, 5) ("eventRun: RUN ID %d\n", run_id); + while ((event = tasks)) { if (event->when > current_dtime) break; + if (event->id == run_id) /* was added during this run */ + break; + if (weight) + break; func = event->func; arg = event->arg; event->func = NULL; @@ -125,7 +135,7 @@ eventRun(void) return; } weight += event->weight; - debug(41, 7) ("eventRun: Running '%s'\n", event->name); + debug(41, 5) ("eventRun: Running '%s', id %d\n", event->name, event->id); func(arg); safe_free(event); } diff --git a/src/neighbors.cc b/src/neighbors.cc index 66fbe49887..349d971d4e 100644 --- a/src/neighbors.cc +++ b/src/neighbors.cc @@ -1,6 +1,6 @@ /* - * $Id: neighbors.cc,v 1.216 1998/05/26 17:37:24 wessels Exp $ + * $Id: neighbors.cc,v 1.217 1998/05/26 19:08:56 wessels Exp $ * * DEBUG: section 15 Neighbor Routines * AUTHOR: Harvest Derived @@ -579,7 +579,7 @@ peerDigestLookup(peer * p, request_t * request, StoreEntry * entry) debug(15, 5) ("peerDigestLookup: !initialized\n"); if (!EBIT_TEST(p->digest.flags, PD_INIT_PENDING)) { EBIT_SET(p->digest.flags, PD_INIT_PENDING); - eventAdd("peerDigestInit", peerDigestInit, p, 0.001, 1); + eventAdd("peerDigestInit", peerDigestInit, p, 0.0, 1); } return LOOKUP_NONE; } else { diff --git a/src/net_db.cc b/src/net_db.cc index cc3278d4bb..fc978632a2 100644 --- a/src/net_db.cc +++ b/src/net_db.cc @@ -1,6 +1,6 @@ /* - * $Id: net_db.cc,v 1.108 1998/05/24 04:15:02 wessels Exp $ + * $Id: net_db.cc,v 1.109 1998/05/26 19:08:57 wessels Exp $ * * DEBUG: section 37 Network Measurement Database * AUTHOR: Duane Wessels @@ -568,13 +568,14 @@ netdbExchangeHandleReply(void *data, char *buf, ssize_t size) break; } } - nused++; if (addr.s_addr != any_addr.s_addr && rtt > 0) netdbExchangeUpdatePeer(addr, ex->p, rtt, hops); assert(o == rec_sz); ex->used += rec_sz; size -= rec_sz; p += rec_sz; + if (++nused == 10) + break; } debug(37, 3) ("netdbExchangeHandleReply: used %d entries, (x %d bytes) == %d bytes total\n", nused, rec_sz, nused * rec_sz); diff --git a/src/store_client.cc b/src/store_client.cc index b61077ad93..86366c2244 100644 --- a/src/store_client.cc +++ b/src/store_client.cc @@ -140,7 +140,7 @@ storeClientCopy2(StoreEntry * e, store_client * sc) if (sc->flags.store_copying) { sc->flags.copy_event_pending = 1; debug(20, 3) ("storeClientCopy: Queueing storeClientCopyEvent()\n"); - eventAdd("storeClientCopyEvent", storeClientCopyEvent, sc, 0.001, 0); + eventAdd("storeClientCopyEvent", storeClientCopyEvent, sc, 0.0, 0); return; } cbdataLock(sc); /* ick, prevent sc from getting freed */ diff --git a/src/store_digest.cc b/src/store_digest.cc index ef2c3f3b40..0401eabbc6 100644 --- a/src/store_digest.cc +++ b/src/store_digest.cc @@ -1,5 +1,5 @@ /* - * $Id: store_digest.cc,v 1.18 1998/05/26 17:37:26 wessels Exp $ + * $Id: store_digest.cc,v 1.19 1998/05/26 19:08:59 wessels Exp $ * * DEBUG: section 71 Store Digest Manager * AUTHOR: Alex Rousskov @@ -200,7 +200,7 @@ storeDigestRebuildResume() if (!storeDigestResize()) cacheDigestClear(store_digest); /* not clean()! */ memset(&sd_stats, 0, sizeof(sd_stats)); - eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0.001, 1); + eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0.0, 1); } /* finishes swap out sequence for the digest; schedules next rebuild */ @@ -238,7 +238,7 @@ storeDigestRebuildStep(void *datanotused) if (sd_state.rebuild_offset >= store_hash_buckets) storeDigestRebuildFinish(); else - eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0.001, 1); + eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0.0, 1); } @@ -295,7 +295,7 @@ storeDigestRewriteResume() httpReplySwapOut(e->mem_obj->reply, e); storeDigestCBlockSwapOut(e); storeBufferFlush(e); - eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, sd_state.rewrite_lock, 0.001, 1); + eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, sd_state.rewrite_lock, 0.0, 1); } /* finishes swap out sequence for the digest; schedules next rewrite */ @@ -343,7 +343,7 @@ storeDigestSwapOutStep(void *data) if (sd_state.rewrite_offset >= store_digest->mask_size) storeDigestRewriteFinish(e); else - eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, e, 0.001, 1); + eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, e, 0.0, 1); } static void diff --git a/src/store_rebuild.cc b/src/store_rebuild.cc index 7c398be515..f36ae0ad83 100644 --- a/src/store_rebuild.cc +++ b/src/store_rebuild.cc @@ -1,5 +1,5 @@ /* - * $Id: store_rebuild.cc,v 1.39 1998/05/26 17:37:26 wessels Exp $ + * $Id: store_rebuild.cc,v 1.40 1998/05/26 19:08:59 wessels Exp $ * * DEBUG: section 20 Store Rebuild Routines * AUTHOR: Duane Wessels @@ -395,7 +395,7 @@ storeRebuildADirectory(void *unused) if (opt_foreground_rebuild) storeRebuildADirectory(NULL); else - eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0.001, 1); + eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0.0, 1); } #if TEMP_UNUSED_CODE @@ -627,7 +627,7 @@ storeCleanup(void *datanotused) if ((++validnum & 0xFFFF) == 0) debug(20, 1) (" %7d Entries Validated so far.\n", validnum); } - eventAdd("storeCleanup", storeCleanup, NULL, 0.001, 1); + eventAdd("storeCleanup", storeCleanup, NULL, 0.0, 1); } void @@ -720,7 +720,7 @@ storeRebuildComplete(void) r > 0 ? (int) r : 0, (double) RebuildState.objcount / (r > 0 ? r : 1)); debug(20, 1) ("Beginning Validation Procedure\n"); - eventAdd("storeCleanup", storeCleanup, NULL, 0.001, 1); + eventAdd("storeCleanup", storeCleanup, NULL, 0.0, 1); } void @@ -760,5 +760,5 @@ storeRebuildStart(void) debug(20, 1) ("Rebuilding storage in Cache Dir #%d (%s)\n", i, clean ? "CLEAN" : "DIRTY"); } - eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0.001, 1); + eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0.0, 1); }