more xcalloc() -> mempool conversions!

From: Adrian Chadd <adrian@dont-contact.us>
Date: Mon, 25 Sep 2000 17:52:36 +0800

This patch is a little rough but it converts a couple of "should have been
MemPool'ed a long time ago" structures.

Can I get someone to look at this and tell me if its right? If so, I'll
commit it.

(Hint: If you want a quick and fun squid project, go through the code, find
all the static buffers being xcalloc()ed, and convert them to mem pools.
Duane, Henrik and I will love you for it. :-)

Adrian

Index: comm.c
===================================================================
RCS file: /cvsroot/squid/squid/src/comm.c,v
retrieving revision 1.1.1.4.2.1.4.2
diff -u -r1.1.1.4.2.1.4.2 comm.c
--- comm.c 2000/07/14 11:36:30 1.1.1.4.2.1.4.2
+++ comm.c 2000/09/25 09:48:16
@@ -69,7 +69,12 @@
 static void commConnectCallback(ConnectStateData * cs, int status);
 static int commResetFD(ConnectStateData * cs);
 static int commRetryConnect(ConnectStateData * cs);
+static CBDUNL commConnectDataFree;
 
+
+static MemPool *comm_write_pool = NULL;
+static MemPool *conn_state_pool = NULL;
+
 static void
 CommWriteStateCallbackAndFree(int fd, int code)
 {
@@ -89,7 +94,7 @@
     if (callback && cbdataValid(data))
         callback(fd, CommWriteState->buf, CommWriteState->offset, code, data);
     cbdataUnlock(data);
- safe_free(CommWriteState);
+ memPoolFree(comm_write_pool, CommWriteState);
 }
 
 /* Return the local port associated with fd. */
@@ -223,9 +228,9 @@
 void
 commConnectStart(int fd, const char *host, u_short port, CNCB * callback, void *data)
 {
- ConnectStateData *cs = xcalloc(1, sizeof(ConnectStateData));
+ ConnectStateData *cs = memPoolAlloc(conn_state_pool);
     debug(5, 3) ("commConnectStart: FD %d, %s:%d\n", fd, host, (int) port);
- cbdataAdd(cs, cbdataXfree, 0);
+ cbdataAdd(cs, commConnectDataFree, 0);
     cs->fd = fd;
     cs->host = xstrdup(host);
     cs->port = port;
@@ -238,6 +243,12 @@
 }
 
 static void
+commConnectDataFree(void *data, int unused)
+{
+ memPoolFree(conn_state_pool, data);
+}
+
+static void
 commConnectDnsHandle(const ipcache_addrs * ia, void *data)
 {
     ConnectStateData *cs = data;
@@ -789,6 +800,8 @@
      * after accepting a client but before it opens a socket or a file.
      * Since Squid_MaxFD can be as high as several thousand, don't waste them */
     RESERVED_FD = XMIN(100, Squid_MaxFD / 4);
+ comm_write_pool = memPoolCreate("CommWriteStateData", sizeof(CommWriteStateData));
+ conn_state_pool = memPoolCreate("ConnectStateData", sizeof(ConnectStateData));
 }
 
 /* Write to FD. */
@@ -861,11 +874,11 @@
         fd, size, handler, handler_data);
     if (NULL != state) {
         debug(5, 1) ("comm_write: fd_table[%d].rwstate != NULL\n", fd);
- safe_free(state);
+ memPoolFree(comm_write_pool, state);
         fd_table[fd].rwstate = NULL;
     }
     assert(state == NULL);
- fd_table[fd].rwstate = state = xcalloc(1, sizeof(CommWriteStateData));
+ fd_table[fd].rwstate = state = memPoolAlloc(comm_write_pool);
     state->buf = buf;
     state->size = size;
     state->offset = 0;
----- End forwarded message -----

-- 
Adrian Chadd			"If a butterfly flaps its wings in China,
<adrian@creative.net.au>	    will a women get naked in Amsterdam?"
				      -- Ashley Penney on Chaos Theory
Received on Mon Sep 25 2000 - 03:52:45 MDT

This archive was generated by hypermail pre-2.1.9 : Tue Dec 09 2003 - 16:12:38 MST