Leif Jackson wrote:
> I belive I have found the memleak for Peters issue:
It's one instance of a whole class of leakage we uncovered here over the
last few days.
Before I did:
g_list_foreach(somelist, (GFunc)g_free, NULL);
g_list_free(somelist);
wheras we should always feed the head of the list to such calls:
somelist = g_list_first(somelist);
g_list_foreach(somelist, (GFunc)g_free, NULL);
somelist = g_list_first(somelist);
g_list_free(somelist);
which can be optimized by storing a reference to the start of the list
like you do below.
I've just committed a patch that adds the rewind to all instances of
freeing lists.
>
>
> Index: dbmail-mailbox.c
> ===================================================================
> --- dbmail-mailbox.c (revision 2574)
> +++ dbmail-mailbox.c (working copy)
> @@ -1312,7 +1312,7 @@
>
> GTree * dbmail_mailbox_get_set(struct DbmailMailbox *self, const char
> *set, gboolean uid)
> {
> - GList *ids = NULL, *sets = NULL;
> + GList *topids, *ids = NULL, *sets = NULL;
> GString *t;
> char *rest;
> u64_t i, l, r, lo = 0, hi = 0;
> @@ -1329,12 +1329,12 @@
> TRACE(TRACE_DEBUG,"[%s] uid [%d]", set, uid);
>
> if (uid) {
> - ids = g_tree_keys(self->ids);
> - ids = g_list_last(ids);
> + topids = g_tree_keys(self->ids);
> + ids = g_list_last(topids);
> hi = *((u64_t *)ids->data);
> - ids = g_list_first(ids);
> + ids = g_list_first(topids);
> lo = *((u64_t *)ids->data);
> - g_list_free(ids);
> + g_list_free(topids);
> } else {
> lo = 1;
> hi = g_tree_nnodes(self->ids);
>
> It is so small a leak it was not notices but peter's imapsync is doing a
> uid ic_fetch on hundreds of ids per fetch command over and over so the
> glist of ids leak would build and build on our servers but on his it
> goes nuts! :)
>
> Thanks,
> Leif
>
> p.s. Peter I am having trouble getting your test script to run on my dev
> box please try the change above and let me/ the group know.
>
>
> Peter Rabbitson wrote:
>> Paul J Stevens wrote:
>>
>>>> ==1631== 71,603,456 bytes in 288,752 blocks are still reachable in loss
>>>> record 26 of 26
>>>>
>>> This could be a side effect of the slab allocator. Use
>>> G_DEBUG=always_malloc valgrind ... to circumvent the glib default
>>> allocator.
>>>
>>
>> Tested with 'export G_DEBUG=always_malloc' yielding nearly identical
>> results (71,604,456 bytes this time). New logs at
>> http://rabbit.us/pool/misc/dbmail_bug584_memcheck_svn2574_always_malloc.tar.bz2
>>
>>
>>
>>> This URL has some interesting points
>>> http://www.tinymail.org/trac/tinymail/wiki/MemoryStats
>>>
>>
>> Erm, being a n00b and all, wouldn't this affect both imap daemons
>> involved in the test? In my case only 'host2' leaks, 'host1' stabilizing
>> at about 40M VSZ.
>>
>> Peter
>> _______________________________________________
>> Dbmail-dev mailing list
>> [email protected]
>> http://twister.fastxs.net/mailman/listinfo/dbmail-dev
>>
>
> _______________________________________________
> Dbmail-dev mailing list
> [email protected]
> http://twister.fastxs.net/mailman/listinfo/dbmail-dev
>
--
________________________________________________________________
Paul Stevens paul at nfg.nl
NET FACILITIES GROUP GPG/PGP: 1024D/11F8CD31
The Netherlands________________________________http://www.nfg.nl
_______________________________________________
Dbmail-dev mailing list
[email protected]
http://twister.fastxs.net/mailman/listinfo/dbmail-dev