Re: squid-3.HEAD IPAddress leak

From: Amos Jeffries <squid3@dont-contact.us>
Date: Thu, 7 Feb 2008 15:10:45 +1300 (NZDT)

> Amos, could you please poke the leak in IPAddress:GetAddrInfo a little?

I'll give it another try. But don't hold your breath too long on that one.

Did you see my note on it?
I tracked that leak backwards from two segfaults to the connect() system
call. Then I tracked the allocation from my init forwards to the connect()
call.

As far as I can tell when connect() returns OK, things work. But if
connect() fails in any way the addrinfo pointer is immediately pointing
somewhere in the system read-only memory with a leak lost. Kernel
segfaults squid when it attempt to cleanup anywhere in the read-only
areas.

Amos

>
> Thanks,
>
>
>
>
> Adrian
>
> ==19601==
> ==19601== ERROR SUMMARY: 9353 errors from 5 contexts (suppressed: 8 from
> 2)
> ==19601== malloc/free: in use at exit: 36,429,514 bytes in 14,790 blocks.
> ==19601== malloc/free: 114,225 allocs, 99,435 frees, 115,499,321 bytes
> allocated.
> ==19601== For counts of detected errors, rerun with: -v
> ==19601== searching for pointers to 14,790 not-freed blocks.
> ==19601== checked 37,289,184 bytes.
> ==19601==
> ==19601==
> ==19601== 4,104 bytes in 4 blocks are possibly lost in loss record 10 of
> 27
> ==19601== at 0x4C21C16: malloc (vg_replace_malloc.c:149)
> ==19601== by 0x4EDE17: xmalloc (util.c:506)
> ==19601== by 0x4754B8: httpHeaderBuildFieldsInfo (SquidNew.h:54)
> ==19601== by 0x46F44F: httpHeaderIdByNameDef (HttpHeader.cc:1707)
> ==19601== by 0x40E197: ACLHTTPHeaderData::parse()
> (ACLHTTPHeaderData.cc:90)
> ==19601== by 0x408D09: ACL::ParseAclLine(ConfigParser&, ACL**)
> (acl.cc:153)
> ==19601== by 0x421365: parse_line(char*) (cache_cf.cc:888)
> ==19601== by 0x424F9F: parseOneConfigFile(char const*, unsigned)
> (cache_cf.cc:325)
> ==19601== by 0x425990: parseConfigFile(char const*, CacheManager&)
> (cache_cf.cc:359)
> ==19601== by 0x483337: main (main.cc:1198)
> ==19601==
> ==19601==
> ==19601== 147,648 (110,736 direct, 36,912 indirect) bytes in 2,307 blocks
> are definitely lost in loss record 25 of 27
> ==19601== at 0x4C21C16: malloc (vg_replace_malloc.c:149)
> ==19601== by 0x4EDE17: xmalloc (util.c:506)
> ==19601== by 0x4E9BD9: IPAddress::GetAddrInfo(addrinfo*&, int) const
> (SquidNew.h:46)
> ==19601== by 0x4C2DAC: comm_connect_addr (comm.cc:1321)
> ==19601== by 0x4C3E70: ConnectStateData::connect() (comm.cc:1249)
> ==19601== by 0x44F7BA: FwdState::connectStart() (forward.cc:912)
> ==19601== by 0x4487AF: EventDispatcher::dispatch() (event.cc:131)
> ==19601== by 0x449747: EventLoop::runOnce() (EventLoop.cc:131)
> ==19601== by 0x449837: EventLoop::run() (EventLoop.cc:100)
> ==19601== by 0x4836F7: main (main.cc:1321)
>
>
>
> --
> - Xenion - http://www.xenion.com.au/ - VPS Hosting - Commercial Squid
> Support -
> - $25/pm entry-level VPSes w/ capped bandwidth charges available in WA -
>
Received on Wed Feb 06 2008 - 19:10:49 MST

This archive was generated by hypermail pre-2.1.9 : Sat Mar 01 2008 - 12:00:09 MST