/*
- * $Id: comm.cc,v 1.254 1998/05/11 21:34:10 wessels Exp $
+ * $Id: comm.cc,v 1.255 1998/05/15 15:16:19 wessels Exp $
*
* DEBUG: section 5 Socket Functions
* AUTHOR: Harvest Derived
#include <netinet/tcp.h>
#endif
+#if USE_ASYNC_IO
+#define MAX_POLL_TIME 50
+#else
+#define MAX_POLL_TIME 1000
+#endif
+
typedef struct {
char *host;
u_short port;
#if HAVE_POLL
/* poll all sockets; call handlers for those that are ready. */
int
-comm_poll(time_t sec)
+comm_poll(int msec)
{
struct pollfd pfds[SQUID_MAXFD];
PF *hdl = NULL;
int num;
static time_t last_timeout = 0;
static int lastinc = 0;
- int poll_time;
static int incoming_counter = 0;
- time_t timeout;
- timeout = squid_curtime + sec;
+ double timeout = current_dtime + (msec / 1000.0);
do {
#if !ALARM_UPDATES_TIME
getCurrentTime();
debug(5, 2) ("comm_poll: Still waiting on %d FDs\n", nfds);
if (nfds == 0)
return COMM_SHUTDOWN;
-#if USE_ASYNC_IO
- poll_time = sec > 0 ? 50 : 0;
-#else
- poll_time = sec > 0 ? 1000 : 0;
-#endif
+ if (msec > MAX_POLL_TIME)
+ msec = MAX_POLL_TIME;
for (;;) {
- num = poll(pfds, nfds, poll_time);
+ num = poll(pfds, nfds, msec);
Counter.select_loops++;
if (num >= 0)
break;
lastinc = polledinc;
}
return COMM_OK;
- } while (timeout > squid_curtime);
+ } while (timeout > current_dtime);
debug(5, 8) ("comm_poll: time out: %d.\n", squid_curtime);
return COMM_TIMEOUT;
}
/* Select on all sockets; call handlers for those that are ready. */
int
-comm_select(time_t sec)
+comm_select(int msec)
{
fd_set readfds;
fd_set writefds;
static time_t last_timeout = 0;
struct timeval poll_time;
static int lastinc;
- time_t timeout;
-
- /* assume all process are very fast (less than 1 second). Call
- * time() only once */
- /* use only 1 second granularity */
- timeout = squid_curtime + sec;
+ double timeout = current_dtime + (msec / 1000.0);
do {
#if !ALARM_UPDATES_TIME
debug(5, 2) ("comm_select: Still waiting on %d FDs\n", nfds);
if (nfds == 0)
return COMM_SHUTDOWN;
+ if (msec > MAX_POLL_TIME)
+ msec = MAX_POLL_TIME;
for (;;) {
-#if USE_ASYNC_IO
- poll_time.tv_sec = 0;
- poll_time.tv_usec = sec > 0 ? 50000 : 0; /* 50 ms */
-#else
- poll_time.tv_sec = sec > 0 ? 1 : 0; /* 1 sec */
- poll_time.tv_usec = 0;
-#endif
+ poll_time.tv_sec = msec / 1000;
+ poll_time.tv_usec = (msec % 1000) * 1000;
num = select(maxfd, &readfds, &writefds, NULL, &poll_time);
Counter.select_loops++;
if (num >= 0)
lastinc = polledinc;
}
return COMM_OK;
- } while (timeout > squid_curtime);
+ } while (timeout > current_dtime);
debug(5, 8) ("comm_select: time out: %d\n", (int) squid_curtime);
return COMM_TIMEOUT;
}
/*
- * $Id: event.cc,v 1.16 1998/05/14 20:47:59 wessels Exp $
+ * $Id: event.cc,v 1.17 1998/05/15 15:16:20 wessels Exp $
*
* DEBUG: section 41 Event Processing
* AUTHOR: Henrik Nordstrom
EVH *func;
void *arg;
const char *name;
- time_t when;
+ double when;
struct ev_entry *next;
int weight;
};
static OBJH eventDump;
void
-eventAdd(const char *name, EVH * func, void *arg, time_t when, int weight)
+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;
event->func = func;
event->arg = arg;
event->name = name;
- event->when = squid_curtime + when;
+ event->when = current_dtime + when;
event->weight = weight;
if (NULL != arg)
- cbdataLock(arg);
- debug(41, 7) ("eventAdd: Adding '%s', in %d seconds\n", name, (int) when);
+ cbdataLock(arg);
+ debug(41, 7) ("eventAdd: Adding '%s', in %f seconds\n", name, when);
/* Insert after the last event with the same or earlier time */
for (E = &tasks; *E; E = &(*E)->next) {
if ((*E)->when > event->when)
/* same as eventAdd but adds a random offset within +-1/3 of delta_ish */
void
-eventAddIsh(const char *name, EVH * func, void *arg, time_t delta_ish, int weight)
+eventAddIsh(const char *name, EVH * func, void *arg, double delta_ish, int weight)
{
- if (delta_ish >= 3) {
- const time_t two_third = (2 * delta_ish) / 3;
- delta_ish = two_third + (squid_random() % two_third);
+ if (delta_ish >= 3.0) {
+ const double two_third = (2.0 * delta_ish) / 3.0;
+ delta_ish = two_third + (drand48() * two_third);
+ /*
+ * I'm sure drand48() isn't portable. Tell me what function
+ * you have that returns a random double value in the range 0,1.
+ */
}
eventAdd(name, func, arg, delta_ish, weight);
}
void *arg;
int weight = 0;
while (0 == weight) {
- if ((event = tasks) == NULL)
+ if ((event = tasks) == NULL)
break;
- if (event->when > squid_curtime)
+ if (event->when > current_dtime)
break;
- func = event->func;
- arg = event->arg;
- event->func = NULL;
- event->arg = NULL;
- tasks = event->next;
- if (NULL != arg) {
- int valid = cbdataValid(arg);
- cbdataUnlock(arg);
- if (!valid)
- return;
- }
- weight += event->weight;
- debug(41, 7) ("eventRun: Running '%s'\n", event->name);
- func(arg);
- safe_free(event);
+ func = event->func;
+ arg = event->arg;
+ event->func = NULL;
+ event->arg = NULL;
+ tasks = event->next;
+ if (NULL != arg) {
+ int valid = cbdataValid(arg);
+ cbdataUnlock(arg);
+ if (!valid)
+ return;
+ }
+ weight += event->weight;
+ debug(41, 7) ("eventRun: Running '%s'\n", event->name);
+ func(arg);
+ safe_free(event);
}
}
{
if (!tasks)
return (time_t) 10;
- return tasks->when - squid_curtime;
+ return (time_t) ((tasks->when - current_dtime) * 1000);
}
void
"Operation",
"Next Execution");
while (e != NULL) {
- storeAppendPrintf(sentry, "%s\t%d seconds\n",
- e->name, (int) (e->when - squid_curtime));
+ storeAppendPrintf(sentry, "%s\t%f seconds\n",
+ e->name, e->when - current_dtime);
e = e->next;
}
}
/*
- * $Id: fqdncache.cc,v 1.101 1998/05/14 20:48:00 wessels Exp $
+ * $Id: fqdncache.cc,v 1.102 1998/05/15 15:16:21 wessels Exp $
*
* DEBUG: section 35 FQDN Cache
* AUTHOR: Harvest Derived
dlink_node *prev = NULL;
fqdncache_entry *f;
int removed = 0;
- eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 10, 1);
+ eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 10.0, 1);
for (m = lru_list.tail; m; m = prev) {
if (memInUse(MEM_FQDNCACHE_ENTRY) < fqdncache_low)
break;
/*
- * $Id: globals.h,v 1.54 1998/04/24 07:09:33 wessels Exp $
+ * $Id: globals.h,v 1.55 1998/05/15 15:16:22 wessels Exp $
*/
extern FILE *debug_log; /* NULL */
extern char *swap_log_op_str[];
extern char *lookup_t_str[];
extern double request_failure_ratio; /* 0.0 */
+extern double current_dtime;
extern int store_hash_buckets; /* 0 */
extern hash_table *store_table; /* NULL */
extern dlink_list store_list;
/*
- * $Id: ipcache.cc,v 1.186 1998/05/14 20:48:01 wessels Exp $
+ * $Id: ipcache.cc,v 1.187 1998/05/15 15:16:23 wessels Exp $
*
* DEBUG: section 14 IP Cache
* AUTHOR: Harvest Derived
dlink_node *prev = NULL;
ipcache_entry *i;
int removed = 0;
- eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10, 1);
+ eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10.0, 1);
for (m = lru_list.tail; m; m = prev) {
if (memInUse(MEM_IPCACHE_ENTRY) < ipcache_low)
break;
/*
- * $Id: main.cc,v 1.250 1998/05/14 20:48:03 wessels Exp $
+ * $Id: main.cc,v 1.251 1998/05/15 15:16:25 wessels Exp $
*
* DEBUG: section 1 Startup and Main Loop
* AUTHOR: Harvest Derived
redirectOpenServers();
useragentOpenLog();
httpHeaderInitModule(); /* must go before any header processing (e.g. the one in errorInitialize) */
- httpAnonInitModule(); /* must go before accepting requests */
+ httpAnonInitModule(); /* must go before accepting requests */
errorInitialize();
accessLogInit();
#ifdef SQUID_SNMP
debug(1, 0) ("Ready to serve requests.\n");
if (!configured_once) {
- eventAdd("storeMaintain", storeMaintainSwapSpace, NULL, 1, 1);
- eventAdd("storeDirClean", storeDirClean, NULL, 15, 1);
+ eventAdd("storeMaintain", storeMaintainSwapSpace, NULL, 1.0, 1);
+ eventAdd("storeDirClean", storeDirClean, NULL, 15.0, 1);
if (Config.onoff.announce)
- eventAdd("start_announce", start_announce, NULL, 3600, 1);
- eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10, 1);
- eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15, 1);
+ eventAdd("start_announce", start_announce, NULL, 3600.0, 1);
+ eventAdd("ipcache_purgelru", ipcache_purgelru, NULL, 10.0, 1);
+ eventAdd("fqdncache_purgelru", fqdncache_purgelru, NULL, 15.0, 1);
}
configured_once = 1;
}
/*
- * $Id: neighbors.cc,v 1.209 1998/05/14 20:48:05 wessels Exp $
+ * $Id: neighbors.cc,v 1.210 1998/05/15 15:16:27 wessels Exp $
*
* DEBUG: section 15 Neighbor Routines
* AUTHOR: Harvest Derived
StoreEntry * entry,
IRCB * callback,
void *callback_data,
- int *exprep)
+ int *exprep,
+ double *exprtt)
{
const char *url = storeUrl(entry);
MemObject *mem = entry->mem_obj;
mem->start_ping = current_time;
mem->icp_reply_callback = callback;
mem->ircb_data = callback_data;
+ *exprtt = 0.0;
for (i = 0, p = first_ping; i++ < Config.npeers; p = p->next) {
if (p == NULL)
p = Config.peers;
} else if (neighborUp(p)) {
/* its alive, expect a reply from it */
(*exprep)++;
+ (*exprtt) += (double) p->stats.rtt;
} else {
/* Neighbor is dead; ping it anyway, but don't expect a reply */
/* log it once at the threshold */
request->hierarchy.n_sent = peers_pinged;
request->hierarchy.n_expect = *exprep;
#endif
+ /*
+ * Average out the expected RTT and then double it
+ */
+ if (*exprep > 0)
+ (*exprtt) = 2.0 * (*exprtt) / (double) (*exprep);
+ else
+ *exprtt = Config.neighborTimeout;
return peers_pinged;
}
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);
+ eventAdd("peerDigestInit", peerDigestInit, p, 0.0, 1);
}
return LOOKUP_NONE;
} else {
ap->sin_port = htons(p->icp_port);
if (p->type == PEER_MULTICAST)
peerCountMcastPeersSchedule(p, 10);
- eventAddIsh("netdbExchangeStart", netdbExchangeStart, p, 30, 1);
+ eventAddIsh("netdbExchangeStart", netdbExchangeStart, p, 30.0, 1);
}
static void
ipcache_nbgethostbyname(p->host, peerDNSConfigure, p);
}
/* Reconfigure the peers every hour */
- eventAddIsh("peerRefreshDNS", peerRefreshDNS, NULL, 3600, 1);
+ eventAddIsh("peerRefreshDNS", peerRefreshDNS, NULL, 3600.0, 1);
}
/*
debug(15, 0) ("TCP connection to %s/%d succeeded\n",
p->host, p->http_port);
} else {
- eventAdd("peerCheckConnect", peerCheckConnect, p, 80, 1);
+ eventAdd("peerCheckConnect", peerCheckConnect, p, 80.0, 1);
}
comm_close(fd);
return;
debug(15, 0) ("TCP connection to %s/%d failed\n", p->host, p->http_port);
p->tcp_up = 0;
p->last_fail_time = squid_curtime;
- eventAdd("peerCheckConnect", peerCheckConnect, p, 80, 1);
+ eventAdd("peerCheckConnect", peerCheckConnect, p, 80.0, 1);
}
static void
eventAdd("peerCountMcastPeersStart",
peerCountMcastPeersStart,
p,
- when, 1);
+ (double) when, 1);
p->mcast.flags |= PEER_COUNT_EVENT_PENDING;
}
eventAdd("peerCountMcastPeersDone",
peerCountMcastPeersDone,
psstate,
- Config.neighborTimeout, 1);
+ (double) Config.neighborTimeout, 1);
p->mcast.flags |= PEER_COUNTING;
peerCountMcastPeersSchedule(p, MCAST_COUNT_RATE);
}
/*
- * $Id: net_db.cc,v 1.101 1998/05/14 20:48:06 wessels Exp $
+ * $Id: net_db.cc,v 1.102 1998/05/15 15:16:28 wessels Exp $
*
* DEBUG: section 37 Network Measurement Database
* AUTHOR: Duane Wessels
getCurrentTime();
debug(37, 0) ("NETDB state saved; %d entries, %d msec\n",
count, tvSubMsec(start, current_time));
- eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600, 1);
+ eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600.0, 1);
}
static void
addr_table = hash_create((HASHCMP *) strcmp, n, hash_string);
n = hashPrime(3 * Config.Netdb.high / 4);
host_table = hash_create((HASHCMP *) strcmp, n, hash_string);
- eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600, 1);
+ eventAddIsh("netdbSaveState", netdbSaveState, NULL, 3600.0, 1);
netdbReloadState();
cachemgrRegister("netdb",
"Network Measurement Database",
/*
- * $Id: peer_digest.cc,v 1.29 1998/05/14 20:48:07 wessels Exp $
+ * $Id: peer_digest.cc,v 1.30 1998/05/15 15:16:29 wessels Exp $
*
* DEBUG: section 72 Peer Digest Routines
* AUTHOR: Alex Rousskov
{
peer *p = data;
assert(p);
- assert(p->digest.flags == (1<<PD_INIT_PENDING));
+ assert(p->digest.flags == (1 << PD_INIT_PENDING));
assert(!p->digest.cd);
assert(SM_PAGE_SIZE == 4096); /* we use MEM_4K_BUF */
-debug(0,0)("peerDigestInit: called for %s\n", p->host);
+ debug(0, 0) ("peerDigestInit: called for %s\n", p->host);
if (EBIT_TEST(p->options, NEIGHBOR_NO_DIGEST)) {
peerDigestDisable(p);
} else {
disable ? "disabling" : "delaying",
p->host ? p->host : "<null>",
delay, mkrfc1123(squid_curtime + delay));
- eventAdd("peerDigestValidate", peerDigestValidate, p, delay, 1);
+ eventAdd("peerDigestValidate", peerDigestValidate, p, (double) delay, 1);
} else {
assert(disable);
debug(72, 2) ("peerDigestDisable: disabling peer %s for good\n",
/* request new digest if our copy is too old; schedule next validation */
static void
-peerDigestValidate(void * data)
+peerDigestValidate(void *data)
{
peer *p = data;
StoreEntry *e = NULL;
debug(72, 2) ("peerDigestRequest: %s key: %s\n", url, storeKeyText(key));
req = urlParse(METHOD_GET, url);
if (NULL == req) {
- debug(72,1)("peerDigestRequest: Bad URI: %s\n", url);
- return; /* @?@ */
+ debug(72, 1) ("peerDigestRequest: Bad URI: %s\n", url);
+ return; /* @?@ */
}
requestLink(req);
assert(req);
/*
- * $Id: peer_select.cc,v 1.57 1998/05/14 20:48:08 wessels Exp $
+ * $Id: peer_select.cc,v 1.58 1998/05/15 15:16:30 wessels Exp $
*
* DEBUG: section 44 Peer Selection Algorithm
* AUTHOR: Duane Wessels
StoreEntry *entry = psstate->entry;
request_t *request = psstate->request;
int direct;
+ double expected_rtt;
debug(44, 3) ("peerSelectFoo: '%s %s'\n",
RequestMethodStr[request->method],
request->host);
request->hier.alg = PEER_SA_NETDB;
code = CLOSEST_PARENT;
debug(44, 2) ("peerSelect: %s/%s\n", hier_strings[code], p->host);
- hierarchyNote(&request->hier, code, &psstate->icp, p->host);
- peerSelectCallback(psstate, p);
- return;
+ hierarchyNote(&request->hier, code, &psstate->icp, p->host);
+ peerSelectCallback(psstate, p);
+ return;
} else if (peerSelectIcpPing(request, direct, entry)) {
assert(entry->ping_status == PING_NONE);
request->hier.alg = PEER_SA_ICP;
entry,
peerHandleIcpReply,
psstate,
- &psstate->icp.n_replies_expected);
+ &psstate->icp.n_replies_expected,
+ &expected_rtt);
if (psstate->icp.n_sent == 0)
debug(44, 0) ("WARNING: neighborsUdpPing returned 0\n");
- debug(44,3)("peerSelectFoo: %d ICP replies expected\n",
- psstate->icp.n_replies_expected);
+ debug(44, 3) ("peerSelectFoo: %d ICP replies expected, RTT %f\n",
+ psstate->icp.n_replies_expected, expected_rtt);
if (psstate->icp.n_replies_expected > 0) {
entry->ping_status = PING_WAITING;
eventAdd("peerPingTimeout",
peerPingTimeout,
psstate,
- Config.neighborTimeout, 0);
+ expected_rtt,
+ 0);
return;
}
}
extern int comm_open(int, int, struct in_addr, u_short port, int, const char *note);
extern u_short comm_local_port(int fd);
#if HAVE_POLL
-extern int comm_poll(time_t);
+extern int comm_poll(int);
#else
-extern int comm_select(time_t);
+extern int comm_select(int);
#endif
extern void commSetSelect(int, unsigned int, PF *, void *, time_t);
extern void comm_add_close_handler(int fd, PF *, void *);
extern void dnsStats(StoreEntry *);
extern void dnsFreeMemory(void);
-extern void eventAdd(const char *name, EVH * func, void *arg, time_t when, int);
-extern void eventAddIsh(const char *name, EVH * func, void *arg, time_t delta_ish, int);
+extern void eventAdd(const char *name, EVH * func, void *arg, double when, int);
+extern void eventAddIsh(const char *name, EVH * func, void *arg, double delta_ish, int);
extern void eventRun(void);
extern time_t eventNextTime(void);
extern void eventDelete(EVH * func, void *arg);
extern size_t httpBuildRequestPrefix(request_t * request,
request_t * orig_request,
StoreEntry * entry,
- MemBuf *mb,
+ MemBuf * mb,
int cfd,
int flags);
extern void httpAnonInitModule();
extern void httpHdrCcInitModule();
extern void httpHdrCcCleanModule();
extern HttpHdrCc *httpHdrCcCreate();
-extern HttpHdrCc *httpHdrCcParseCreate(const String *str);
+extern HttpHdrCc *httpHdrCcParseCreate(const String * str);
extern void httpHdrCcDestroy(HttpHdrCc * cc);
extern HttpHdrCc *httpHdrCcDup(const HttpHdrCc * cc);
extern void httpHdrCcPackInto(const HttpHdrCc * cc, Packer * p);
extern void httpHdrCcStatDumper(StoreEntry * sentry, int idx, double val, double size, int count);
/* Http Range Header Field */
-extern HttpHdrRange *httpHdrRangeParseCreate(const String *range_spec);
+extern HttpHdrRange *httpHdrRangeParseCreate(const String * range_spec);
/* returns true if ranges are valid; inits HttpHdrRange */
-extern int httpHdrRangeParseInit(HttpHdrRange * range, const String *range_spec);
+extern int httpHdrRangeParseInit(HttpHdrRange * range, const String * range_spec);
extern void httpHdrRangeDestroy(HttpHdrRange * range);
extern HttpHdrRange *httpHdrRangeDup(const HttpHdrRange * range);
extern void httpHdrRangePackInto(const HttpHdrRange * range, Packer * p);
extern int httpHeaderIdByName(const char *name, int name_len, const HttpHeaderFieldInfo * attrs, int end);
extern void httpHeaderMaskInit(HttpHeaderMask * mask);
extern void httpHeaderCalcMask(HttpHeaderMask * mask, const int *enums, int count);
-extern int httpHeaderHasConnDir(const HttpHeader *hdr, const char *directive);
-extern void strListAdd(String *str, const char *item, char del);
-extern int strListIsMember(const String *str, const char *item, char del);
-extern int strListGetItem(const String *str, char del, const char **item, int *ilen, const char **pos);
+extern int httpHeaderHasConnDir(const HttpHeader * hdr, const char *directive);
+extern void strListAdd(String * str, const char *item, char del);
+extern int strListIsMember(const String * str, const char *item, char del);
+extern int strListGetItem(const String * str, char del, const char **item, int *ilen, const char **pos);
extern const char *getStringPrefix(const char *str, const char *end);
extern int httpHeaderParseInt(const char *start, int *val);
extern int httpHeaderParseSize(const char *start, size_t * sz);
extern void httpHeaderPutTime(HttpHeader * hdr, http_hdr_type type, time_t time);
extern void httpHeaderPutStr(HttpHeader * hdr, http_hdr_type type, const char *str);
extern void httpHeaderPutAuth(HttpHeader * hdr, const char *authScheme, const char *realm);
-extern void httpHeaderPutCc(HttpHeader * hdr, const HttpHdrCc *cc);
+extern void httpHeaderPutCc(HttpHeader * hdr, const HttpHdrCc * cc);
extern void httpHeaderPutExt(HttpHeader * hdr, const char *name, const char *value);
extern int httpHeaderGetInt(const HttpHeader * hdr, http_hdr_type id);
extern time_t httpHeaderGetTime(const HttpHeader * hdr, http_hdr_type id);
extern void httpHeaderStoreReport(StoreEntry * e);
/* Http Msg (currently in HttpReply.c @?@ ) */
-extern int httpMsgIsPersistent(float http_ver, const HttpHeader *hdr);
+extern int httpMsgIsPersistent(float http_ver, const HttpHeader * hdr);
extern int httpMsgIsolateHeaders(const char **parse_start, const char **blk_start, const char **blk_end);
/* Http Reply */
extern void requestDestroy(request_t *);
extern request_t *requestLink(request_t *);
extern void requestUnlink(request_t *);
-extern int httpRequestParseHeader(request_t *req, const char *parse_start);
+extern int httpRequestParseHeader(request_t * req, const char *parse_start);
extern void httpRequestSetHeaders(request_t *, method_t, const char *uri, const char *header_str);
-extern int httpRequestHdrAllowed(const HttpHeaderEntry *e, String *strConnection);
+extern int httpRequestHdrAllowed(const HttpHeaderEntry * e, String * strConnection);
extern void icmpOpen(void);
extern void icmpClose(void);
StoreEntry *,
IRCB * callback,
void *data,
- int *exprep);
+ int *exprep,
+ double *exprtt);
extern void neighborAddAcl(const char *, const char *);
extern void neighborsUdpAck(const cache_key *, icp_common_t *, const struct sockaddr_in *);
extern void neighborAdd(const char *, const char *, int, int, int, int, int);
/*
- * $Id: send-announce.cc,v 1.50 1998/05/14 20:48:11 wessels Exp $
+ * $Id: send-announce.cc,v 1.51 1998/05/15 15:16:32 wessels Exp $
*
* DEBUG: section 27 Cache Announcer
* AUTHOR: Duane Wessels
return;
cbdataAdd(junk = xmalloc(1), MEM_NONE);
ipcache_nbgethostbyname(Config.Announce.host, send_announce, junk);
- eventAdd("send_announce", start_announce, NULL, Config.Announce.period, 1);
+ eventAdd("send_announce", start_announce, NULL, (double) Config.Announce.period, 1);
}
static void
/*
- * $Id: stat.cc,v 1.247 1998/05/14 20:48:12 wessels Exp $
+ * $Id: stat.cc,v 1.248 1998/05/15 15:16:33 wessels Exp $
*
* DEBUG: section 18 Cache Manager Statistics
* AUTHOR: Harvest Derived
for (i = 0; i < N_COUNT_HOUR_HIST; i++)
statCountersInit(&CountHourHist[i]);
statCountersInit(&Counter);
- eventAdd("statAvgTick", statAvgTick, NULL, COUNT_INTERVAL, 1);
+ eventAdd("statAvgTick", statAvgTick, NULL, (double) COUNT_INTERVAL, 1);
cachemgrRegister("info",
"General Runtime Information",
info_get, 0);
/*
- * $Id: store.cc,v 1.414 1998/05/14 20:48:15 wessels Exp $
+ * $Id: store.cc,v 1.415 1998/05/15 15:16:35 wessels Exp $
*
* DEBUG: section 20 Storage Manager
* AUTHOR: Harvest Derived
int max_scan;
int max_remove;
static time_t last_warn_time = 0;
- eventAdd("storeMaintainSwapSpace", storeMaintainSwapSpace, NULL, 1, 1);
+ eventAdd("storeMaintainSwapSpace", storeMaintainSwapSpace, NULL, 1.0, 1);
/* We can't delete objects while rebuilding swap */
if (store_rebuilding)
return;
if (sc->flags.store_copying) {
sc->flags.copy_event_pending = 1;
debug(20, 3) ("storeClientCopy: Queueing storeClientCopyEvent()\n");
- eventAdd("storeClientCopyEvent", storeClientCopyEvent, sc, 0, 0);
+ eventAdd("storeClientCopyEvent", storeClientCopyEvent, sc, 0.0, 0);
return;
}
cbdataLock(sc); /* ick, prevent sc from getting freed */
/*
- * $Id: store_digest.cc,v 1.16 1998/05/14 20:48:17 wessels Exp $
+ * $Id: store_digest.cc,v 1.17 1998/05/15 15:16:37 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, 1);
+ eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0.0, 1);
}
/* finishes swap out sequence for the digest; schedules next rebuild */
sd_state.rebuild_lock = 0;
sd_state.rebuild_count++;
debug(71, 2) ("storeDigestRebuildFinish: done.\n");
- eventAdd("storeDigestRebuildStart", storeDigestRebuildStart, NULL, StoreDigestRebuildPeriod, 1);
+ eventAdd("storeDigestRebuildStart", storeDigestRebuildStart, NULL, (double) StoreDigestRebuildPeriod, 1);
/* resume pending Rewrite if any */
if (sd_state.rewrite_lock)
storeDigestRewriteResume();
if (sd_state.rebuild_offset >= store_hash_buckets)
storeDigestRebuildFinish();
else
- eventAdd("storeDigestRebuildStep", storeDigestRebuildStep, NULL, 0, 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, 1);
+ eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, sd_state.rewrite_lock, 0.0, 1);
}
/* finishes swap out sequence for the digest; schedules next rewrite */
requestUnlink(e->mem_obj->request);
e->mem_obj->request = NULL;
storeUnlockObject(e);
- /*
- * note, it won't really get free()'d here because we used
- * MEM_DONTFREE in the call to cbdataAdd().
- */
+ /*
+ * note, it won't really get free()'d here because we used
+ * MEM_DONTFREE in the call to cbdataAdd().
+ */
cbdataFree(sd_state.rewrite_lock);
sd_state.rewrite_lock = e = NULL;
sd_state.rewrite_count++;
- eventAdd("storeDigestRewriteStart", storeDigestRewriteStart, NULL, StoreDigestRewritePeriod, 1);
+ eventAdd("storeDigestRewriteStart", storeDigestRewriteStart, NULL, (double) StoreDigestRewritePeriod, 1);
/* resume pending Rebuild if any */
if (sd_state.rebuild_lock)
storeDigestRebuildResume();
/* swaps out one digest "chunk" per invocation; schedules next swap out */
static void
-storeDigestSwapOutStep(void * data)
+storeDigestSwapOutStep(void *data)
{
- StoreEntry * e = data;
+ StoreEntry *e = data;
int chunk_size = StoreDigestSwapOutChunkSize;
assert(e);
assert(e == sd_state.rewrite_lock);
if (sd_state.rewrite_offset >= store_digest->mask_size)
storeDigestRewriteFinish(e);
else
- eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, e, 0, 1);
+ eventAdd("storeDigestSwapOutStep", storeDigestSwapOutStep, e, 0.0, 1);
}
static void
/*
- * $Id: store_rebuild.cc,v 1.37 1998/05/14 20:48:18 wessels Exp $
+ * $Id: store_rebuild.cc,v 1.38 1998/05/15 15:16:38 wessels Exp $
*
* DEBUG: section 20 Store Rebuild Routines
* AUTHOR: Duane Wessels
if (opt_foreground_rebuild)
storeRebuildADirectory(NULL);
else
- eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0, 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, 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, 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, 1);
+ eventAdd("storeRebuild", storeRebuildADirectory, NULL, 0.0, 1);
}
/*
- * $Id: tools.cc,v 1.153 1998/04/08 00:34:20 wessels Exp $
+ * $Id: tools.cc,v 1.154 1998/05/15 15:16:39 wessels Exp $
*
* DEBUG: section 21 Misc Functions
* AUTHOR: Harvest Derived
#else
gettimeofday(¤t_time, NULL);
#endif
+ current_dtime = (double) current_time.tv_sec +
+ (double) current_time.tv_usec / 1000000.0;
return squid_curtime = current_time.tv_sec;
}