Wireshark-dev: Re: [Wireshark-dev] Memory Leak?
From: "phishjam78@xxxxxxxxx" <phishjam78@xxxxxxxxx>
Date: Mon, 3 Aug 2009 16:54:45 -0700 (PDT)
Still no luck fixing this memory leak... I am using Wireshark v 1.2.0 code as a base. I have looked into tshark, file, and rawshark very closely and I believe I am actually freeing more memory than they are, but still have not been able to figure out why field_info associated with "ti" below is not being free'd. Thoughts? Anyone? ________________________________ From: "phishjam78@xxxxxxxxx" <phishjam78@xxxxxxxxx> To: wireshark-dev@xxxxxxxxxxxxx Sent: Thursday, July 30, 2009 7:38:15 PM Subject: Memory Leak? I have been rolling my own version of "tshark" for a project. I needed to do a few things differently, but wanted all the awesomness of the dissectors to work for me. I have been looking at a few reported memory leaks (via Valgrind) and there are two that are really stumping me. I am wondering if I am setting up someting wrong or not freeing something properly. I build my edt pointer by: edt = epan_dissect_new(create_proto_tree, TRUE); Then I fill out requisite information, call the ep_free_all() and then dissect_ip. Within dissect_ip()... if (tree) { ti = proto_tree_add_item(tree, proto_ip, tvb, offset, hlen, FALSE); the "ti" pointer has a frame_info that never seems to get free'd. If I manually try to free it after dissection, bad things happen. Then, once dissect_ip returns, I get my data out, and call the contents of epan_dissect_free(). /* Free the data sources list. */ free_data_sources(&edt->pi); /* Free all tvb's created from this tvb, unless dissector * wanted to store the pointer (in which case, the dissector * would have incremented the usage count on that tvbuff_t*) */ tvb_free_chain(edt->tvb); if (edt->tree) { proto_tree_free(edt->tree); } g_free(edt); >From there, edt->tree doesn't seem to have its members properly deleted. The "rest" of the tree seems to go away, but not the "root" node itself. When running for only a few minutes, I can see the memory creep up and multiple controlled valgrind runs confirmed what I am seeing. I am a bit stumped. Could I not be setting up the edt pointer correctly or fillint out its members correctly? Is there something else I need to do when cleaning up? Do I HAVE to use the tap_queue_init(edt) and tap_push_tapped_queue(edt) functions? Overall, the app works perfectly...except for some pesky memory leaks. Any and all help/ideas would be greatly appreciated! - John
- Prev by Date: [Wireshark-dev] buildbot failure in Wireshark (development) on Windows-XP-x86
- Next by Date: Re: [Wireshark-dev] error during the compilation.
- Previous by thread: [Wireshark-dev] buildbot failure in Wireshark (development) on Windows-XP-x86
- Next by thread: [Wireshark-dev] How to decode just TCP flow data
- Index(es):
- Get Wireshark
- Download
- Code of Conduct