[Kde-bindings] QtRuby memleak continued
Ashley Winters
jahqueel at yahoo.com
Fri Sep 1 07:16:41 UTC 2006
--- Caleb Tennis <caleb at aei-tech.com> wrote:
> Ok, I've updated to the latest changes in the 3.5 branch of the
> qtruby/korundum and ran my program through valgrind for about 24
> hours to
> accumulate where the leaks are still coming from. Here are the two
> big
> offenders:
>
>
[charP marshaller leaks]
> I can definitely see HOW the memory is being leaked, but it's not
> entirely
> clear where the responsibility lies for cleaning up the heap objects
> after
> they are created. I may just stab at it for a while unless you have
> any
> thoughts, Richard?
In the latest Qt4 version, the m->cleanup() logic has been commented
out. Is there a reason?
Smoke has delete-responsibility information built in, for
argument/return-values. Here's the charP marshaller from PerlQt, for
comparison:
switch(m->action()) {
case Marshall::FromSV:
{
SV *sv = m->var();
if(!SvOK(sv)) {
m->item().s_voidp = 0;
break;
}
if(m->cleanup())
m->item().s_voidp = SvPV_nolen(sv);
else {
STRLEN len;
char *svstr = SvPV(sv, len);
char *str = new char [len + 1];
strncpy(str, svstr, len);
str[len] = 0;
m->item().s_voidp = str;
}
}
break;
case Marshall::ToSV:
{
char *p = (char*)m->item().s_voidp;
if(p)
sv_setpv_mg(m->var(), p);
else
sv_setsv_mg(m->var(), &PL_sv_undef);
if(m->cleanup())
delete[] p;
}
break;
default:
m->unsupported();
break;
}
If you'll notice, it's checking m->cleanup() on both the To and From
marshallers. In the From marshaller, m->cleanup() indicates that the
CALLEE will destroy the passed-in value -- in that case, I make a copy
of my string before passing it through.
In the To marshaller, m->cleanup() indicates that the contents were
copied automatically *inside the Smoke library* before being passed to
the marshaller. As soon as you copy the string into a language
variable, it's your responsibility to delete it. This happens most
often with objects (such as a function returning 'const QSize&') which
are copied via new inside Smoke, where it's your responsibility to
destroy the object.
That's my knowledge in the matter. I don't know how much it applies to
QtRuby these days. :)
Good luck,
- Ashley Winters
__________________________________________________
Do You Yahoo!?
Tired of spam? Yahoo! Mail has the best spam protection around
http://mail.yahoo.com
More information about the Kde-bindings
mailing list