--- /home/johnm/original/memcache.c 2005-01-24 07:21:50.000000000 +0000 +++ /home/johnm/libmemcache-1.2.3/memcache.c 2005-03-16 17:25:56.907131776 +0000 @@ -781,8 +781,12 @@ mcm_free(const struct memcache_ctxt *ctx mcm_server_free(ctxt, ms); } - if (ms->size > 0) - ctxt->mcFree(ms->buf); +// This should be freed per ms struct inside of the mcm_server_free call... +// The buffer was once at the mc struct level and I'm guessing Sean changed it +// late at night and missed this issue! +// +// if (ms->size > 0) +// ctxt->mcFree(ms->buf); if (mc->live_servers != NULL) { ctxt->mcFree(mc->live_servers); @@ -1766,6 +1770,12 @@ mcm_server_free(const struct memcache_ct if (ms->port != NULL) ctxt->mcFree(ms->port); + // There was a leak here previously as no free occured + // and later the mc_free call just freed a single servers + // (the last in the list) buffer... + if (ms->buf != NULL) + ctxt->mcFree(ms->buf); + if (ms->fd != -1) { if (close(ms->fd) != 0) warn("%s:%u\tclose()", __FILE__, __LINE__);