Den 1. jun. 2010 22.46 skrev Matt Seegmiller <[email protected]>:

> We've been getting a crash in V8 sporadically and I was curious if
> there is someone who might know something obvious we're doing to cause
> it, or if this might be a bug, or anything helpful.
>
> I've posted before about using V8 in a multithreaded game engine.
> This is the same engine.  This could very well be a multithreading
> issue we've introduced ourselves, or a completely
> non-threading-related issue, or a V8 bug, but because the crash is
> happening in V8, I'm not at all sure what might be the root cause.
>
> We're running on Windows 7, using VS2008 to build both V8 and our
> engine.  We're currently using V8 trunk r4756 (2.2.13).
>
> The crash happens in contexts.cc line 61 or 62:
>
>  Context* Context::global_context() {
>    // Fast case: the global object for this context has been set.  In
>    // that case, the global object has a direct pointer to the global
>    // context.
>    if (global()->IsGlobalObject()) {
>      return global()->global_context();
>    }
>
>    // During bootstrapping, the global object might not be set and we
>    // have to search the context chain to find the global context.
>    ASSERT(Bootstrapper::IsActive());
>    Context* current = this;
>    while (!current->IsGlobalContext()) {
> >>    JSFunction* closure = JSFunction::cast(current->closure());
> >>    current = Context::cast(closure->context());
>    }
>    return current;
>  }
>
> From looking at the disassembly, it appears it's the
> current->closure() that is the specific crash.  The crash is an Access
> Violation reading location 0x6c6c7575 (in the one case I wrote out, I
>

I don't have an idea for the crash.  That is a suspiciously regular bit
pattern though.  I ends in binary 01 so it could be a heap object pointer,
but it could also be part of a 16 bit RGB colour or the string "uull".  So
what I'm saying is it looks a bit like a stray write from a different part
of the program.


> think it changes every time).  So current is pointing to something
> non-NULL, but apparently bad.  If I understand this code correctly,
> these lines shouldn't be executed except during bootstrapping, and I'm
> pretty sure this isn't during boostrapping.
>
> The call stack at the time of the crash is:
>
> >       v8.dll!v8::internal::Context::global_context()  Line 62 C++
>
>  
> v8.dll!v8::internal::GetKeysInFixedArrayFor(v8::internal::Handle<v8::internal::JSObject>
> object={...}, v8::internal::KeyCollectionType type=INCLUDE_PROTOS)
> Line 595 + 0x19 bytes   C++
>        v8.dll!v8::Object::GetPropertyNames()  Line 2152        C++
>        locust-mljavascript-2_1.dll!CLVV8Array::GetSizeImpl()  Line 108 +
> 0x13 bytes      C++
>
> where locust-mljavascript-2_1.dll is the entry point from our code.
>
> At this point, this thread seems to have the lock on the V8 Locker,
> and there is another thread running that has always been waiting for
> the lock to be given up at the time of the crash.
>
> So, any ideas?  Unfortunately, this is happening consistently but
> sporadically.  We don't have a repeatable test case for it.
>
> Thanks,
>
> matt
>
> --
> v8-users mailing list
> [email protected]
> http://groups.google.com/group/v8-users
>

-- 
v8-users mailing list
[email protected]
http://groups.google.com/group/v8-users

Reply via email to