/*
- * $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
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);
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;
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);
}
/*
- * $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
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 {
/*
- * $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
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);
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 */
/*
- * $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
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 */
if (sd_state.rebuild_offset >= store_hash_buckets)
storeDigestRebuildFinish();
else
- eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0.001, 1);
+ eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0.0, 1);
}
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 */
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
/*
- * $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
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
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
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
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);
}