MEM_ICP_COMMON_T,
MEM_IOSTATS,
MEM_MEM_NODE,
- MEM_MEM_HDR,
MEM_STORE_CLIENT,
MEM_MEMOBJECT,
MEM_STOREENTRY,
/*
- * $Id: mem.cc,v 1.25 1998/05/30 19:43:14 rousskov Exp $
+ * $Id: mem.cc,v 1.26 1998/07/07 02:54:14 wessels Exp $
*
* DEBUG: section 13 High Level Memory Pool Management
* AUTHOR: Harvest Derived
memDataInit(MEM_IPCACHE_ENTRY, "ipcache_entry", sizeof(ipcache_entry), 0);
memDataInit(MEM_MEMOBJECT, "MemObject", sizeof(MemObject),
Squid_MaxFD >> 3);
- memDataInit(MEM_MEM_HDR, "mem_hdr", sizeof(mem_hdr), 0);
memDataInit(MEM_MEM_NODE, "mem_node", sizeof(mem_node), 0);
memDataInit(MEM_NETDBENTRY, "netdbEntry", sizeof(netdbEntry), 0);
memDataInit(MEM_NET_DB_NAME, "net_db_name", sizeof(net_db_name), 0);
/*
- * $Id: stat.cc,v 1.258 1998/06/08 17:29:19 wessels Exp $
+ * $Id: stat.cc,v 1.259 1998/07/07 02:54:14 wessels Exp $
*
* DEBUG: section 18 Cache Manager Statistics
* AUTHOR: Harvest Derived
memInUse(MEM_STOREENTRY));
storeAppendPrintf(sentry, "\t%6d StoreEntries with MemObjects\n",
memInUse(MEM_MEMOBJECT));
- storeAppendPrintf(sentry, "\t%6d StoreEntries with MemObject Data\n",
- memInUse(MEM_MEM_HDR));
storeAppendPrintf(sentry, "\t%6d Hot Object Cache Items\n",
hot_obj_count);
storeAppendPrintf(sentry, "\t%6d Filemap bits set\n",
/*
- * $Id: stmem.cc,v 1.60 1998/03/28 23:24:50 wessels Exp $
+ * $Id: stmem.cc,v 1.61 1998/07/07 02:54:15 wessels Exp $
*
* DEBUG: section 19 Store Memory Primitives
* AUTHOR: Harvest Derived
void
stmemFree(mem_hdr * mem)
{
- mem_node *lastp;
- mem_node *p = mem->head;
-
- if (p) {
- while (p && (p != mem->tail)) {
- lastp = p;
- p = p->next;
- if (lastp) {
- memFree(MEM_STMEM_BUF, lastp->data);
- store_mem_size -= SM_PAGE_SIZE;
- safe_free(lastp);
- }
- }
-
- if (p) {
- memFree(MEM_STMEM_BUF, p->data);
- store_mem_size -= SM_PAGE_SIZE;
- safe_free(p);
- }
+ mem_node *p;
+ while ((p = mem->head)) {
+ mem->head = p->next;
+ memFree(MEM_STMEM_BUF, p->data);
+ store_mem_size -= SM_PAGE_SIZE;
+ safe_free(p);
}
- memFree(MEM_MEM_HDR, mem);
+ mem->head = mem->tail = NULL;
+ mem->origin_offset = 0;
}
int
/*
- * $Id: store.cc,v 1.424 1998/06/28 07:52:59 wessels Exp $
+ * $Id: store.cc,v 1.425 1998/07/07 02:54:17 wessels Exp $
*
* DEBUG: section 20 Storage Manager
* AUTHOR: Harvest Derived
static void storeHashDelete(StoreEntry *);
static MemObject *new_MemObject(const char *, const char *);
static void destroy_MemObject(StoreEntry *);
-static void destroy_MemObjectData(MemObject *);
static FREE destroy_StoreEntry;
static void storePurgeMem(StoreEntry *);
static unsigned int getKeyCounter(method_t);
const Ctx ctx = ctx_enter(mem->url);
debug(20, 3) ("destroy_MemObject: destroying %p\n", mem);
assert(mem->swapout.fd == -1);
- destroy_MemObjectData(mem);
+ stmemFree(&mem->data_hdr);
+ mem->inmem_hi = 0;
/* XXX account log_url */
#if USE_ASYNC_IO
while (mem->clients != NULL)
memFree(MEM_STOREENTRY, e);
}
-static void
-destroy_MemObjectData(MemObject * mem)
-{
- debug(20, 3) ("destroy_MemObjectData: destroying %p, %d bytes\n",
- mem->data, (int) mem->inmem_hi);
- if (mem->data) {
- stmemFree(mem->data);
- mem->data = NULL;
- }
- mem->inmem_hi = 0;
-}
-
/* ----- INTERFACE BETWEEN STORAGE MANAGER AND HASH TABLE FUNCTIONS --------- */
void
storeSetMemStatus(e, NOT_IN_MEMORY);
e->swap_status = SWAPOUT_NONE;
e->swap_file_number = -1;
- mem->data = memAllocate(MEM_MEM_HDR);
e->refcount = 0;
e->lastref = squid_curtime;
e->timestamp = 0; /* set in storeTimestampsSet() */
len,
storeKeyText(e->key));
storeGetMemSpace(len);
- stmemAppend(mem->data, buf, len);
+ stmemAppend(&mem->data_hdr, buf, len);
mem->inmem_hi += len;
}
if (EBIT_TEST(e->flag, DELAY_SENDING))
MemObject *mem = e->mem_obj;
if (mem == NULL)
return 0;
- if (mem->data == NULL)
+ if (mem->data_hdr.head == NULL)
return 0;
return mem->inmem_lo == 0;
}
void
storeMemObjectDump(MemObject * mem)
{
- debug(20, 1) ("MemObject->data: %p\n",
- mem->data);
+ debug(20, 1) ("MemObject->data.head: %p\n",
+ mem->data_hdr.head);
+ debug(20, 1) ("MemObject->data.tail: %p\n",
+ mem->data_hdr.tail);
+ debug(20, 1) ("MemObject->data.origin_offset: %d\n",
+ mem->data_hdr.origin_offset);
debug(20, 1) ("MemObject->start_ping: %d.%06d\n",
(int) mem->start_ping.tv_sec,
(int) mem->start_ping.tv_usec);
} else if (sc->copy_offset >= mem->inmem_lo && sc->copy_offset < mem->inmem_hi) {
/* What the client wants is in memory */
debug(20, 3) ("storeClientCopy2: Copying from memory\n");
- sz = stmemCopy(mem->data, sc->copy_offset, sc->copy_buf, sc->copy_size);
+ sz = stmemCopy(&mem->data_hdr, sc->copy_offset, sc->copy_buf, sc->copy_size);
#if USE_ASYNC_IO
if (sc->flags.disk_io_pending) {
if (sc->swapin_fd >= 0)
if (!EBIT_TEST(e->flag, ENTRY_CACHABLE)) {
if (!EBIT_TEST(e->flag, KEY_PRIVATE))
debug(20, 3) ("storeCheckSwapOut: Attempt to swap out a non-cacheable non-private object!\n");
- stmemFreeDataUpto(mem->data, new_mem_lo);
+ stmemFreeDataUpto(&mem->data_hdr, new_mem_lo);
mem->inmem_lo = new_mem_lo;
return;
}
if (mem->swapout.queue_offset < new_mem_lo)
new_mem_lo = mem->swapout.queue_offset;
- stmemFreeDataUpto(mem->data, new_mem_lo);
+ stmemFreeDataUpto(&mem->data_hdr, new_mem_lo);
mem->inmem_lo = new_mem_lo;
swapout_size = (size_t) (mem->inmem_hi - mem->swapout.queue_offset);
if (swapout_size > STORE_SWAP_BUF)
swapout_size = STORE_SWAP_BUF;
swap_buf = memAllocate(MEM_DISK_BUF);
- swap_buf_len = stmemCopy(mem->data,
+ swap_buf_len = stmemCopy(&mem->data_hdr,
mem->swapout.queue_offset,
swap_buf,
swapout_size);
struct _MemObject {
method_t method;
char *url;
- mem_hdr *data;
+ mem_hdr data_hdr;
off_t inmem_hi;
off_t inmem_lo;
store_client *clients;