[webkit-dev] ScopeChainNode leak?
Andrew Webster
apwebster at gmail.com
Wed Jun 10 11:26:32 PDT 2009
I've been tracking down a memory leak I've noticed on pages using
JQuery (and others). Valgrind pointed out that it is ScopeChainNodes
that are leaking. I have tracked this down to functions that are not
dereffing their ScopeChainNode when they are deleted. I notice that
the JSFunction dtor contains code that is supposed to do this, but it
is ifdef'd out for non-JIT platforms (of which I am one of):
#if ENABLE(JIT)
// JIT code for other functions may have had calls linked directly
to the code for this function; these links
// are based on a check for the this pointer value for this
JSFunction - which will no longer be valid once
// this memory is freed and may be reused (potentially for
another, different JSFunction).
if (!isHostFunction()) {
if (m_body && m_body->isGenerated())
m_body->generatedBytecode().unlinkCallers();
scopeChain().~ScopeChain();
}
#endif
If I switch this code to:
if (!isHostFunction()) {
#if ENABLE(JIT)
// JIT code for other functions may have had calls linked
directly to the code for this function; these links
// are based on a check for the this pointer value for this
JSFunction - which will no longer be valid once
// this memory is freed and may be reused (potentially for
another, different JSFunction).
if (m_body && m_body->isGenerated())
m_body->generatedBytecode().unlinkCallers();
#endif
scopeChain().~ScopeChain();
}
it seems to solve the memory leak. However, the release build doesn't
work properly unless I remove the #ifndef NDEBUG from ScopeChain.h so
that the pointers and such are cleared on delete. I also thought that
it might be a good idea to call scopeChain().~ScopeChain() when the
scope is re-assigned in setScopeChain or clearScopeChain, however this
seems to introduce problems.
Can anyone comment on why scopeChain().~ScopeChain() is wrapped in #if
ENABLE(JIT)? Is there a better solution then what I've done? Will I
face another leak by not dereffing in setScopeChain/cleanScopeChain?
Thanks,
Andrew
More information about the webkit-dev
mailing list