[webkit-reviews] review denied: [Bug 194706] Cache CompactVariableMap::Handle instead of VariableEnvironment for UnlinkedFunctionExecutable : [Attachment 362118] Patch

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Tue Feb 19 09:31:19 PST 2019

Saam Barati <sbarati at apple.com> has denied Tadeu Zagallo <tzagallo at apple.com>'s
request for review:
Bug 194706: Cache CompactVariableMap::Handle instead of VariableEnvironment for

Attachment 362118: Patch


--- Comment #2 from Saam Barati <sbarati at apple.com> ---
Comment on attachment 362118
  --> https://bugs.webkit.org/attachment.cgi?id=362118

View in context: https://bugs.webkit.org/attachment.cgi?id=362118&action=review

I think this is slightly off but I’m not 100% sure. Since Handle is responsible
for bumping/decrementing the ref count, I’m not sure we properly model that,
since we might decode only N handles, but have the ref count as M. I wonder if
it’d make more sense to iteratively build the ref count as we decode handles?

> Source/JavaScriptCore/runtime/CachedTypes.cpp:941
> +	   CompactVariableMap* map = new CompactVariableMap;

This looks like a leak to me. How is this supposed to be handled? Maybe this
should return Ref, and this should be adoptRef?

> Source/JavaScriptCore/runtime/CachedTypes.cpp:962
> +	   handle.m_map = m_map.decode(decoder);

I’m assuming the decoder already hash-conses stuff?

> Source/JavaScriptCore/runtime/CachedTypes.cpp:963
> +	   return handle;

It worries me that we somehow don’t end up updating the map’s ref count in
place. For example, when we encode a graph of code blocks, there may be
Handle’s that live outside that graph. If so, we’re now leaking those
VariableEnvironments since we’re encoding a global ref count. I think we should
be smart enough to rebuild it local to the map we’re re-creating.

More information about the webkit-reviews mailing list