[webkit-dev] Javascript collector
Maciej Stachowiak
mjs at apple.com
Wed Jul 25 13:16:36 PDT 2007
On Jul 25, 2007, at 1:02 PM, Patrick Hanna wrote:
> I am running into a segmentation fault in
> Collector::collectOnMainThreadOnly on the line that reads:
>
> cellBlock(cell)->collectOnMainThreadOnly.set(cellOffset(cell));
>
> I believe that the reason is because the address passed in as
> 'value' is the address of a stack variable. This address comes from
> PluginsFunc::callAsFunction. PluginBase is created on the stack and
> the constructor for DOMObject calls
> Collector::collectOnMainThreadOnly with 'this' as the parameter.
>
> My question is, should Collector::collectOnMainThreadOnly work with
> stack pointers? If it is supposed to work, when does the
> CollectorBlock for the stack object get created? Specificy,
> CollectorBlock::collectOnMainThreadOnly is the structure that I'm
> running in to problems with.
That's definitely a bug. It's illegal to create JSObject subclasses on
the stack at all, as this will break garbage collection. Please file
it. I think it's only through luck that it's not crashing for others
(and maybe it is, but we just don't know it yet.)
Two possible solutions:
1) make refresh() a static member function of PluginBase, since it
only touches static data members anyway. Then you won't need to
instantiate a PluginBase object.
2) Have PluginFuncs look at the "this" object, which should be a
Plugins, which inherits from PluginBase and thus should have the
refresh method.
Do you have steps to consistently reproduce this bug?
Regards,
Maciej
More information about the webkit-dev
mailing list