]> git.ipfire.org Git - thirdparty/squid.git/commitdiff
re-fix event spin problems
authorwessels <>
Wed, 27 May 1998 01:08:54 +0000 (01:08 +0000)
committerwessels <>
Wed, 27 May 1998 01:08:54 +0000 (01:08 +0000)
src/event.cc
src/neighbors.cc
src/net_db.cc
src/store_client.cc
src/store_digest.cc
src/store_rebuild.cc

index b01d5e03c7219d121c0e12d13407a3c0d0dbec9d..096a1a4b66f4da16f91c1d7b78ef344cc1471780 100644 (file)
@@ -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);
     }
index 66fbe49887f3f7a1c5761cd2a61a95024b415a71..349d971d4e58636e9521d8adad4e0f5a0061bedd 100644 (file)
@@ -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 {
index cc3278d4bbbabefdb4605f0e4b592911f69f63df..fc978632a2d57b04185fe0d7c86e2ccfca949c95 100644 (file)
@@ -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);
index b61077ad93a5724b03469a5aa8ba2ec15a208974..86366c2244a460b889583720572cadd14288eb72 100644 (file)
@@ -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 */
index ef2c3f3b405522f31146a4298111d6277b0d8175..0401eabbc6ee822774c6a99d03f5e5376e9288da 100644 (file)
@@ -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
index 7c398be5153eecdbbcd21f0f2f27859343699991..f36ae0ad83307992ec8cd1660e9e671126eee7c8 100644 (file)
@@ -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);
 }