From: wessels <> Date: Mon, 19 Apr 1999 10:45:03 +0000 (+0000) Subject: - removed silly restriction that all memory pools are initialized X-Git-Tag: SQUID_3_0_PRE1~2264 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=58a39dc9d5090d3088545462ac8299b02b7c5829;p=thirdparty%2Fsquid.git - removed silly restriction that all memory pools are initialized in memInit() - Added MEM_EVENT - Fixed eventRun() bug that exited the run loop upon finding an event with invalid callback data. This also most certainly leaked event structures. - added "void" to a bunch of prototypes arglists. --- diff --git a/src/dns_internal.cc b/src/dns_internal.cc index 26225ef25e..76b51399c3 100644 --- a/src/dns_internal.cc +++ b/src/dns_internal.cc @@ -1,6 +1,6 @@ /* - * $Id: dns_internal.cc,v 1.8 1999/04/19 03:31:30 wessels Exp $ + * $Id: dns_internal.cc,v 1.9 1999/04/19 04:45:03 wessels Exp $ * * DEBUG: section 78 DNS lookups; interacts with lib/rfc1035.c * AUTHOR: Duane Wessels @@ -44,12 +44,27 @@ #define IDNS_MAX_TRIES 20 +typedef struct _idns_query idns_query; typedef struct _ns ns; + +struct _idns_query { + char buf[512]; + size_t sz; + unsigned short id; + int nsends; + struct timeval start_t; + struct timeval sent_t; + dlink_node lru; + IDNSCB *callback; + void *callback_data; +}; + struct _ns { struct sockaddr_in S; int nqueries; int nreplies; }; + static ns *nameservers = NULL; static int nns = 0; static int nns_alloc = 0; @@ -332,6 +347,7 @@ void idnsInit(void) { static int init = 0; + memDataInit(MEM_IDNS_QUERY, "idns_query", sizeof(idns_query), 0); if (DnsSocket < 0) { DnsSocket = comm_open(SOCK_DGRAM, 0, diff --git a/src/enums.h b/src/enums.h index 2e8f909063..23cd876cb4 100644 --- a/src/enums.h +++ b/src/enums.h @@ -1,6 +1,6 @@ /* - * $Id: enums.h,v 1.148 1999/04/15 06:15:54 wessels Exp $ + * $Id: enums.h,v 1.149 1999/04/19 04:45:03 wessels Exp $ * * * SQUID Internet Object Cache http://squid.nlanr.net/Squid/ @@ -557,6 +557,7 @@ typedef enum { MEM_USHORTLIST, MEM_WORDLIST, MEM_IDNS_QUERY, + MEM_EVENT, MEM_MAX } mem_type; diff --git a/src/event.cc b/src/event.cc index 6ee4c0d3e3..3fbd586497 100644 --- a/src/event.cc +++ b/src/event.cc @@ -1,6 +1,6 @@ /* - * $Id: event.cc,v 1.26 1999/04/19 03:53:36 wessels Exp $ + * $Id: event.cc,v 1.27 1999/04/19 04:45:04 wessels Exp $ * * DEBUG: section 41 Event Processing * AUTHOR: Henrik Nordstrom @@ -53,7 +53,7 @@ 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 *event = memAllocate(MEM_EVENT); struct ev_entry **E; event->func = func; event->arg = arg; @@ -101,7 +101,7 @@ eventDelete(EVH * func, void *arg) *E = event->next; if (NULL != event->arg) cbdataUnlock(event->arg); - xfree(event); + memFree(event, MEM_EVENT); return; } debug_trap("eventDelete: event not found"); @@ -121,6 +121,7 @@ eventRun(void) run_id++; debug(41, 5) ("eventRun: RUN ID %d\n", run_id); while ((event = tasks)) { + int valid = 1; if (event->when > current_dtime) break; if (event->id == run_id) /* was added during this run */ @@ -133,15 +134,16 @@ eventRun(void) event->arg = NULL; tasks = event->next; if (NULL != arg) { - int valid = cbdataValid(arg); + valid = cbdataValid(arg); cbdataUnlock(arg); - if (!valid) - return; } - weight += event->weight; - debug(41, 5) ("eventRun: Running '%s', id %d\n", event->name, event->id); - func(arg); - safe_free(event); + if (valid) { + weight += event->weight; + debug(41, 5) ("eventRun: Running '%s', id %d\n", + event->name, event->id); + func(arg); + } + memFree(event, MEM_EVENT); } } @@ -156,6 +158,7 @@ eventNextTime(void) void eventInit(void) { + memDataInit(MEM_EVENT, "event", sizeof(struct ev_entry), 0); cachemgrRegister("events", "Event Queue", eventDump, 0, 1); @@ -185,7 +188,7 @@ eventFreeMemory(void) while ((event = tasks)) { if (NULL != event->arg) cbdataUnlock(event->arg); - xfree(event); + memFree(event, MEM_EVENT); } tasks = NULL; } diff --git a/src/main.cc b/src/main.cc index c21bec927e..06a692572c 100644 --- a/src/main.cc +++ b/src/main.cc @@ -1,6 +1,6 @@ /* - * $Id: main.cc,v 1.292 1999/04/15 06:16:00 wessels Exp $ + * $Id: main.cc,v 1.293 1999/04/19 04:45:05 wessels Exp $ * * DEBUG: section 1 Startup and Main Loop * AUTHOR: Harvest Derived @@ -498,8 +498,8 @@ mainInitialize(void) squid_signal(SIGALRM, time_tick, SA_RESTART); alarm(1); #endif + memCheckInit(); debug(1, 1) ("Ready to serve requests.\n"); - if (!configured_once) { eventAdd("storeMaintain", storeMaintainSwapSpace, NULL, 1.0, 1); eventAdd("storeDirClean", storeDirClean, NULL, 15.0, 1); diff --git a/src/mem.cc b/src/mem.cc index 953f279804..c8a33045aa 100644 --- a/src/mem.cc +++ b/src/mem.cc @@ -1,6 +1,6 @@ /* - * $Id: mem.cc,v 1.40 1999/04/14 05:16:17 wessels Exp $ + * $Id: mem.cc,v 1.41 1999/04/19 04:45:06 wessels Exp $ * * DEBUG: section 13 High Level Memory Pool Management * AUTHOR: Harvest Derived @@ -65,17 +65,6 @@ static MemMeter StrVolumeMeter; /* local routines */ -/* - * we have a limit on _total_ amount of idle memory so we ignore - * max_pages for now - */ -static void -memDataInit(mem_type type, const char *name, size_t size, int max_pages_notused) -{ - assert(name && size); - MemPools[type] = memPoolCreate(name, size); -} - static void memStringStats(StoreEntry * sentry) { @@ -119,6 +108,17 @@ memStats(StoreEntry * sentry) * public routines */ +/* + * we have a limit on _total_ amount of idle memory so we ignore + * max_pages for now + */ +void +memDataInit(mem_type type, const char *name, size_t size, int max_pages_notused) +{ + assert(name && size); + MemPools[type] = memPoolCreate(name, size); +} + /* find appropriate pool and use it (pools always init buffer with 0s) */ void * @@ -177,7 +177,6 @@ void memInit(void) { int i; - mem_type t; memInitModule(); /* set all pointers to null */ memset(MemPools, '\0', sizeof(MemPools)); @@ -291,9 +290,22 @@ memInit(void) sizeof(helper_request), 0); memDataInit(MEM_HELPER_SERVER, "helper_server", sizeof(helper_server), 0); - memDataInit(MEM_IDNS_QUERY, "idns_query", - sizeof(idns_query), 0); - /* test that all entries are initialized */ + /* init string pools */ + for (i = 0; i < mem_str_pool_count; i++) { + StrPools[i].pool = memPoolCreate(StrPoolsAttrs[i].name, StrPoolsAttrs[i].obj_size); + } + cachemgrRegister("mem", + "Memory Utilization", + memStats, 0, 1); +} + +/* + * Test that all entries are initialized + */ +void +memCheckInit(void) +{ + mem_type t; for (t = MEM_NONE, t++; t < MEM_MAX; t++) { if (MEM_DONTFREE == t) continue; @@ -303,17 +315,10 @@ memInit(void) */ assert(MemPools[t]); } - /* init string pools */ - for (i = 0; i < mem_str_pool_count; i++) { - StrPools[i].pool = memPoolCreate(StrPoolsAttrs[i].name, StrPoolsAttrs[i].obj_size); - } - cachemgrRegister("mem", - "Memory Utilization", - memStats, 0, 1); } void -memClean() +memClean(void) { memCleanModule(); } diff --git a/src/protos.h b/src/protos.h index fbaebd9f4b..4e5ff79f0e 100644 --- a/src/protos.h +++ b/src/protos.h @@ -1,6 +1,6 @@ /* - * $Id: protos.h,v 1.318 1999/04/18 05:30:56 wessels Exp $ + * $Id: protos.h,v 1.319 1999/04/19 04:45:06 wessels Exp $ * * * SQUID Internet Object Cache http://squid.nlanr.net/Squid/ @@ -737,10 +737,10 @@ extern void memMeterSyncHWater(MemMeter * m); /* mem */ extern void memInit(void); -extern void memClean(); -extern void memInitModule(); -extern void memCleanModule(); -extern void memConfigure(); +extern void memClean(void); +extern void memInitModule(void); +extern void memCleanModule(void); +extern void memConfigure(void); extern void *memAllocate(mem_type); extern void *memAllocBuf(size_t net_size, size_t * gross_size); extern CBDUNL memFree; @@ -751,6 +751,8 @@ extern void memFree8K(void *); extern void memFreeDISK(void *); extern int memInUse(mem_type); extern size_t memTotalAllocated(void); +extern void memDataInit(mem_type, const char *, size_t, int); +extern void memCheckInit(void); /* MemPool */ extern MemPool *memPoolCreate(const char *label, size_t obj_size); @@ -871,11 +873,11 @@ extern HASHCMP storeKeyHashCmp; extern EVH storeDirClean; /* store_digest.c */ -extern void storeDigestInit(); -extern void storeDigestNoteStoreReady(); -extern void storeDigestScheduleRebuild(); +extern void storeDigestInit(void); +extern void storeDigestNoteStoreReady(void); +extern void storeDigestScheduleRebuild(void); extern void storeDigestDel(const StoreEntry * entry); -extern void storeDigestReport(); +extern void storeDigestReport(void); /* * store_dir.c @@ -1115,11 +1117,11 @@ extern peer *carpSelectParent(request_t *); #if DELAY_POOLS extern void delayPoolsInit(void); extern void delayInitDelayData(unsigned short pools); -extern void delayFreeDelayData(); +extern void delayFreeDelayData(void); extern void delayCreateDelayPool(unsigned short pool, u_char class); extern void delayInitDelayPool(unsigned short pool, u_char class, delaySpecSet * rates); extern void delayFreeDelayPool(unsigned short pool); -extern void delayPoolsReconfigure(); +extern void delayPoolsReconfigure(void); extern void delaySetNoDelay(int fd); extern void delayClearNoDelay(int fd); extern int delayIsNoDelay(int fd); diff --git a/src/structs.h b/src/structs.h index 9c73bbf8b2..521a50a7bc 100644 --- a/src/structs.h +++ b/src/structs.h @@ -1,6 +1,6 @@ /* - * $Id: structs.h,v 1.281 1999/04/16 01:00:54 wessels Exp $ + * $Id: structs.h,v 1.282 1999/04/19 04:45:07 wessels Exp $ * * * SQUID Internet Object Cache http://squid.nlanr.net/Squid/ @@ -1676,15 +1676,3 @@ struct _helper_server { struct _generic_cbdata { void *data; }; - -struct _idns_query { - char buf[512]; - size_t sz; - unsigned short id; - int nsends; - struct timeval start_t; - struct timeval sent_t; - dlink_node lru; - IDNSCB *callback; - void *callback_data; -}; diff --git a/src/typedefs.h b/src/typedefs.h index 5fa163f975..1bf3678803 100644 --- a/src/typedefs.h +++ b/src/typedefs.h @@ -1,6 +1,6 @@ /* - * $Id: typedefs.h,v 1.87 1999/04/14 05:16:20 wessels Exp $ + * $Id: typedefs.h,v 1.88 1999/04/19 04:45:08 wessels Exp $ * * * SQUID Internet Object Cache http://squid.nlanr.net/Squid/ @@ -161,7 +161,6 @@ typedef struct _helper helper; typedef struct _helper_server helper_server; typedef struct _helper_request helper_request; typedef struct _generic_cbdata generic_cbdata; -typedef struct _idns_query idns_query; #if SQUID_SNMP typedef variable_list *(oid_ParseFn) (variable_list *, snint *);