Matt,

Thank you for pointing this out. I added a fix to version 6.2, which is available for download now. The routines to remove or reset samplers/pollers/agents and receivers were never tested properly so please treat those parts with more than the usual level of suspicion. For example, 6.2 also includes a fix to sfl_agent_resetReceiver().

Regards,
Neil McKee
InMon Corp.


On Oct 5, 2009, at 9:52 AM, Matt Woodley wrote:

Hi,

I recently came across a potential memory leak within the Agent code that
can occur when an Agent sets a Poller or Sampler's receiver to Null.

Within the Sflow Api, Pollers and Samplers are maintained as linked lists, with the head maintained at the Agent. The links are stored as pointers
within the SFLPoller and SFLSampler structs respectively.
This list is used for cleanup when "sfl_agent_release" is called. However,
if during the lifetime of a Poller (or Sampler),
"sfl_poller_set_sFlowCpReceiver" is invoked with a Null receiver, the
behaviour is to memset the current Poller, which resets the "nxt" pointer which points to the next poller in the linked list, effectively truncating
the list at the current Poller.

Now, when "sfl_agent_release" is called, depending on the order of Pollers, and who's receivers were set to 0, anywhere from 1 to N Pollers will be freed. Leaving the rest as leaked memory, assuming the code using the API
has dropped all references as well.

Thanks,

Matt

Reply via email to