On Sat, 11 Oct 2008 14:06:49 +0200, nico <[EMAIL PROTECTED]> wrote: >Hello, > >I wrote a program that list recursively files from a given directory. >I'm impressed by the memory usage of such a program (after one minutes, >it uses more than 100 BM on my /usr/ directory... after 5 minute I >have to kill the process : I've only 512 MB of RAM... so my system is >becoming unstable). >(for comparison, the same program written in php uses less than 1 MB to >list all files of my /usr/). > >Is something wrong in my code? Do I forgot to unref or free something?
Yes. It seems you should read again the documentation for GError :). See the attached patch against your code for a better hadling of GError's. You don't set a GError yourself, instead you initialise this pointer to NULL and then pass a reference to a particular function. And this function sets the pointer to a valid GError object which you can use. And this should be freed when no longer needed. Additionally, your fiddling with strcat to build the path is completely unnecessary (and it was wrong), use g_build_filename() for that. Regarding the memory usage: maybe there is still something which should be freed/unref'd, but generally I guess most of the usage comes from the fact that you run the code recursively. That is, each function call of scan_dir() with all its allocated data exists until the scan_dir() call from inside this function is finished. So, when you walk a tree like /test /test/this /test/this/to /test/this/to/check /test/this/to/check/the /test/this/to/check/the/code and your scan_dir function is at the last level 'code', then all scan_dir() calls from the previous levels are still running and waiting for their child calls to finish and so they still use the memory. Regards, Enrico -- Get my GPG key from http://www.uvena.de/pub.asc
_______________________________________________ gtk-app-devel-list mailing list gtk-app-devel-list@gnome.org http://mail.gnome.org/mailman/listinfo/gtk-app-devel-list