Re: patches for a few memory leaks

From: <wojtek@dont-contact.us>
Date: Sat, 26 May 2001 22:42:42 +0200 (CEST)

> squid-2.4.STABLE1.
>
>
> 1. Squid leaks 72 bytes every minute because it does not free data
> allocated for comm_dns_incoming counter:
>

about 80kB/day...

what i'm doing bad so my squid starts from 69MB after starting and
store rebuild, and get near 78MB after few days?

> --- squid-2.4.STABLE1/src/stat.c.orig Fri Jan 12 02:51:52 2001
> +++ squid-2.4.STABLE1/src/stat.c Wed May 23 22:24:19 2001
> @@ -1002,6 +1002,7 @@
> statHistClean(&C->dns.svc_time);
> statHistClean(&C->cd.on_xition_count);
> statHistClean(&C->comm_icp_incoming);
> + statHistClean(&C->comm_dns_incoming);
> statHistClean(&C->comm_http_incoming);
> statHistClean(&C->select_fds_hist);
> }
>
>
> 2. snmpAddNode() duplicates the oid created by snmpCreateOid() and
> does not free the original. A few bytes leaked at start-up.
>
> --- squid-2.4.STABLE1/src/snmp_core.c.orig Fri Jan 12 02:51:51 2001
> +++ squid-2.4.STABLE1/src/snmp_core.c Wed May 23 22:25:03 2001
> @@ -958,7 +958,7 @@
>
> va_start(args, children);
> entry = xmalloc(sizeof(mib_tree_entry));
> - entry->name = snmpOidDup(name, len);
> + entry->name = name;
> entry->len = len;
> entry->parsefunction = parsefunction;
> entry->instancefunction = instancefunction;
>
>
> 3. If Squid is configured as a httpd accelerator, then it leaks
> Config2.Accel.prefix at every reconfigure/log rotation. I moved the
> initialization and the memory freeing code into cf_gen.c. The
> code will be put into the generated default_all() and
> free_all(). Is this the right approach?
>
> --- squid-2.4.STABLE1/src/cache_cf.c.orig Thu Mar 1 23:49:25 2001
> +++ squid-2.4.STABLE1/src/cache_cf.c Thu May 24 07:27:23 2001
> @@ -259,7 +259,6 @@
> configDoConfigure(void)
> {
> LOCAL_ARRAY(char, buf, BUFSIZ);
> - memset(&Config2, '\0', sizeof(SquidConfig2));
> /* init memory as early as possible */
> memConfigure();
> /* Sanity checks */
> --- squid-2.4.STABLE1/src/cf_gen.c.orig Fri Jan 12 02:51:45 2001
> +++ squid-2.4.STABLE1/src/cf_gen.c Thu May 24 07:26:27 2001
> @@ -383,6 +383,8 @@
> "{\n"
> "\tcfg_filename = \"Default Configuration\";\n"
> "\tconfig_lineno = 0;\n"
> + "\n"
> + "\tmemset(&Config2, '\\0', sizeof(SquidConfig2));\n"
> );
> for (entry = head; entry != NULL; entry = entry->next) {
> assert(entry->name);
> @@ -549,6 +551,7 @@
> if (entry->ifdef)
> fprintf(fp, "#endif\n");
> }
> + fprintf(fp, "\tfree_string(&Config2.Accel.prefix);\n");
> fprintf(fp, "}\n\n");
> }
>
>
> 4. If squid is compiled with support for delay pools but no pools are
> configured, then squid will leak a few bytes at every
> reconfigure/log rotation.
>
> --- squid-2.4.STABLE1/src/cache_cf.c.orig Thu Mar 1 23:49:25 2001
> +++ squid-2.4.STABLE1/src/cache_cf.c Thu May 24 02:40:42 2001
> @@ -682,10 +682,12 @@
> free_delay_pool_count(cfg);
> }
> parse_ushort(&cfg->pools);
> - delayInitDelayData(cfg->pools);
> - cfg->class = xcalloc(cfg->pools, sizeof(u_char));
> - cfg->rates = xcalloc(cfg->pools, sizeof(delaySpecSet *));
> - cfg->access = xcalloc(cfg->pools, sizeof(acl_access *));
> + if (cfg->pools) {
> + delayInitDelayData(cfg->pools);
> + cfg->class = xcalloc(cfg->pools, sizeof(u_char));
> + cfg->rates = xcalloc(cfg->pools, sizeof(delaySpecSet *));
> + cfg->access = xcalloc(cfg->pools, sizeof(acl_access *));
> + }
> }
>
> static void
>
>
> I'll appreciate your replies to be cc-ed to me as I'm not subscribed
> to the list.
>
>
> Thank you,
> Radu Greab
>
Received on Sat May 26 2001 - 14:44:46 MDT

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