and the value of "this" when you hit the FATAL()

On Tue, Apr 12, 2016 at 7:33 PM Jochen Eisinger <joc...@chromium.org> wrote:

> Could you post a stack trace that leads to the FATAL()?
>
> On Tue, Apr 12, 2016 at 7:27 PM Ben Noordhuis <i...@bnoordhuis.nl> wrote:
>
>> On Tue, Apr 12, 2016 at 7:11 PM,  <benjamin.pas...@gmail.com> wrote:
>> > Hi,
>> >
>> > we (Microsoft VS Code team) are tracking down a very weird native crash
>> in
>> > our use of node.js (5.10.0, V8 46) that only ever shows up since we
>> updated
>> > from node.js 4.x (V8 45). It seems that changes (around the Garbace
>> > Collector?) in V8 46 have an impact to the crash.
>> >
>> > Specifically, we are using the node-weak module
>> > (https://github.com/TooTallNate/node-weak) to be able to get weak
>> references
>> > onto JavaScript objects. This used to work relatively good in node.js
>> 4.x,
>> > but with node.js 5.x we suddenly get the entire node.js program to
>> terminate
>> > with a fatal crash.
>> >
>> > Today we were finally able to track the location of where the crash
>> > originates and it seems to happen when our application simply calls
>> into a
>> > property of the object that is weakly referenced. This call at one point
>> > reaches the following assertion:
>> >
>> > void Object::VerifyApiCallResultType() {
>> > #if DEBUG
>> >   if (!(IsSmi() || IsString() || IsSymbol() || IsSpecObject() ||
>> >         IsHeapNumber() || IsSimd128Value() || IsUndefined() || IsTrue()
>> ||
>> >         IsFalse() || IsNull())) {
>> >     FATAL("API call returned invalid object");
>> >   }
>> > #endif  // DEBUG
>> > }
>> >
>> >
>> > The process terminates from the FATAL call, as none of the previous
>> checks
>> > in this method hold.
>> >
>> >
>> > Now, the interesting question is: How would it be possible to have a JS
>> > object where calling properties on it would fail in such a fatal way? It
>> > seems to us that the object we are calling a property on is a pointer
>> to a
>> > location in memory where no V8 object exists anymore. It almost seems
>> that
>> > the object was garbage collected (or moved to another address?) without
>> the
>> > JS side (or more specifically the node-weak side) getting to know.
>> >
>> >
>> > Since this only reproduces with using node-weak, it seems very likely
>> that
>> > there is an issue with either node-weak or NAN. In fact, node-weak is
>> > calling into SetWeak()
>> > (
>> https://github.com/TooTallNate/node-weak/blob/master/src/weakref.cc#L174)
>> > and relies on the fact that the callback passed in is triggered and
>> maybe
>> > this callback is not triggered anymore in a sync fashion but rather
>> async?
>> >
>> >
>> > I would appreciate some pointers if there is something that could have
>> > probably changed in V8 46 that could have an impact on this.
>>
>> If you have a simple test case (stress on 'simple'), I'll have a look.
>>
>> --
>> --
>> v8-dev mailing list
>> v8-dev@googlegroups.com
>> http://groups.google.com/group/v8-dev
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "v8-dev" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to v8-dev+unsubscr...@googlegroups.com.
>> For more options, visit https://groups.google.com/d/optout.
>>
>

-- 
-- 
v8-dev mailing list
v8-dev@googlegroups.com
http://groups.google.com/group/v8-dev
--- 
You received this message because you are subscribed to the Google Groups 
"v8-dev" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to v8-dev+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to