excessive memory usage on file list download
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
LinuxDC++ |
Confirmed
|
Undecided
|
Unassigned |
Bug Description
Description of the issue
I have just downloaded a number of file lists ranging from several kB to several MB and this is what happens
Mem: 2053260k total, 1891236k used, 162024k free, 2496k buffers
Swap: 2095100k total, 255924k used, 1839176k free, 384880k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
27935 me 21 1 2250m 1.1g 8540 S 2 56.1 1:20.87 linuxdcpp
The filelists are all parsed correctly as they should but the memory usage increases to <insane> and stays that way forever.
Since filelists are never re-used by the program in any way they should be unloaded from memory as well or at least placed into cached so that it can be overwritten.
An other option is to create the possibility for downloading partial file lists to limit the use of RAM.
Steps to reproduce
Download several filelists of up to 60 MB or even more
Expected result
Increase of RAM usage to accommodate for parsing filelist, take out info needed, dump filelist to reduce RAM usage.
Actual result
Increase or RAM usage to accommodate for parsing filelist, take out info needed, leave unneeded info in RAM
Version
Compiled from latest BZR
OS
Opensuse 11.3 to 12.1
No backtrace since no crash
There are four scenarios where the filelist is loaded as far as I can tell.
1) You manually load a file list from disk by opening it in the file menu and it opens up the tab to browse the share
2) You download someone's list and it opens up the tab to browse the share when the download is complete.
3) You download a directory and the list is downloaded by default
4) You choose the match queue option in search, transfers, hub, or favorite users window.
In option 1 & 2, the list is loaded in memory in order to support the viewing of that list. Until you close the tab associated with that list the memory will obviously not be released.
Option 3 doesn't look to be storing the loaded list, it simply uses it to find additional sources then discards it.
Option 4 might have some issue. It caches a single list in a static TTH map for some reason. The next time you match a file list this cache should be cleared and the memory released.
Can you try this:
- Confirm in which scenarios above you are seeing the issue.
- If it's option 4, see if matching the queue of a person with a large list increases the memory to the levels you mentioned for a sustained period of time.
- Then see if matching the queue of a person with a small list causes the memory to reduce to normal levels.