Affects Version/s: 0.8, 0.12
Fix Version/s: None
Component/s: C++ Broker
RHEL4.7 and RHEL6.2
One of our customers observed that the Qpid daemon's memory footprint increased over a number of weeks. We were able to reproduce this in-house, and noticed that the increase was correlated with queu creation/deletion (our application, when under load, creates & destroys a large number of queues).
This memory leak wasn't discoverable with valgrind (i.e., memcheck), since it's not the result of lost pointers, but massif was very useful. It appears that entries in the std::map Bindings (DirectExchange.h:41) created on DirectExchange.cpp:71 (during creation of, in our case, the default binding) are never deleted when the queue and binding are deleted on DirectExchange.cpp:~138.
While individual map entries aren't that expensive, over several thousand queue creations and deletions, the memory consumed does grow to be substantial.
If I explicitly delete the map entry, memory usage appears to remain stable over time.
While I doubt that my fix will be best way to resolve this issue, I'll attach my patch anyway, in the case that it helps in understanding the issue.