Opened on 10/09/2015 at 05:16:49 PM
Last modified on 10/12/2015 at 10:41:06 AM
#3188 new defect
ABP-IE engine crashes when it asks v8 to exceed one of its internal limits
Reported by: | eric@adblockplus.org | Assignee: | |
---|---|---|---|
Priority: | Unknown | Milestone: | |
Module: | Adblock-Plus-for-Internet-Explorer | Keywords: | crash |
Cc: | Blocked By: | ||
Blocking: | Platform: | Internet Explorer | |
Ready: | no | Confidential: | no |
Tester: | Unknown | Verified working: | no |
Review URL(s): |
Description
Environment
Development version 1.4, 32-bit version. Nothing relevant in the code has changed with 1.5.
Running under Windows 7 64-bit, IE version 11.
How to reproduce
There's no deterministic way to reproduce this defect, nor even an easy way to know that any particular crash has the same cause as the present report. That said, opening lots of tabs in a short period of time frequently causes an engine crash. Slow web sites seem to aggravate the problem.
Observed behavior
The engine crashes. An APPCRASH dialog appears. The exception code for the halt is 80000003, which is the code for a software-triggered breakpoint.
Expected behavior
No crashing.
Summary of the problem
There's a hard limit inside v8 for the number of isolates. In a debug compile this limit is checked in an assertion that is the proximate cause for the APPCRASH.
Attachments (0)
Change History (2)
comment:1 Changed on 10/09/2015 at 05:59:08 PM by eric@adblockplus.org
comment:2 Changed on 10/12/2015 at 10:41:06 AM by sergz
Summary of the problem
There's a hard limit inside v8 for the number of isolates. In a debug compile this limit is checked in an assertion that is the proximate cause for the APPCRASH.
I would like to precise that it's not a number of isolates (there is only one instance of isolate in our case), according to the code it is the number of the nodes used by the node block.
I would say, most likely we have a race condition somewhere, although it can be also a bug of current version of v8.
This is the call stack at the time of the crash.
The code that triggered the abort is in IncreaseUses(), global-handles.cc:342. Here's the text:
The value of used_nodes_ at the time of the crash was 256. 'kSize' is a class constant defined on line 321:
I haven't yet determined what's using up the v8 internal resource. The constructor of the libadblockplus class AdblockPlus::V8ValueHolder is the present cause of this crash. This class seems to be the only part of the non-v8 code that invokes v8::Persistent, but the class does appear in v8 itself.