I agree with Jochen. Looks like ~ComponentMesh is being called by gc.

On Wednesday, March 23, 2016, Jochen Eisinger <[email protected]> wrote:

> It looks like mesh is collected, not root. How does root keep mesh alive?
>
> On Wed, Mar 23, 2016, 9:20 PM Scott Duensing <[email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>> wrote:
>
>> I've been working on a game engine and using V8 as the embedded
>> language.  Everything has been going fairly well, using SWIG to wrap native
>> C++ classes for use in JS.
>>
>> Until today.
>>
>> My test code creates a triangle in JavaScript and sends it to the engine
>> to be rendered.  It works.  For about 5 seconds.  Then the 'root' object of
>> my scene gets garbage collected by V8 and I'm not sure why.  I set a
>> breakpoint when the object is destroyed and captured a stack trace:
>>
>> 0    ComponentMesh::~ComponentMesh    componentMesh.cpp    18    0x4cd39e
>> 1    ComponentMesh::~ComponentMesh    componentMesh.cpp    19    0x4cd472
>> 2    _wrap_delete_ComponentMesh    componentMesh_wrap.cpp    1788
>> 0x435c46
>> 3    v8::internal::GlobalHandles::Node::PostGarbageCollectionProcessing(
>> v8::internal::Isolate *)            0x6a7fee
>> 4    v8::internal::GlobalHandles::PostScavengeProcessing(int)
>> 0x6a7e75
>> 5    v8::internal::GlobalHandles::PostGarbageCollectionProcessing(v8::
>> internal::GarbageCollector, v8::GCCallbackFlags)            0x6a86ba
>> 6    v8::internal::Heap::PerformGarbageCollection(v8::internal::
>> GarbageCollector, v8::GCCallbackFlags)            0x6afa77
>> 7    v8::internal::Heap::CollectGarbage(v8::internal::GarbageCollector,
>> const char *, const char *, v8::GCCallbackFlags)            0x6af054
>> 8    v8::internal::Factory::NewRawOneByteString(int, v8::internal::
>> PretenureFlag)            0x68677d
>> 9    v8::internal::Factory::NewStringFromUtf8(v8::internal::Vector<char
>> const>, v8::internal::PretenureFlag)            0x686bb0
>> 10    v8::String::NewFromUtf8(v8::Isolate *, const char *, v8::
>> NewStringType, int)            0x4d00ea
>> 11    ScriptInstance::update    scriptInstance.cpp    179    0x41d744
>> 12    Scripting::update    scripting.cpp    219    0x41609c
>> 13    main    main.cpp    70    0x4b2331
>>
>>
>>
>> As you can see, my scripting system calls update() in the JS code which
>> should call render() back in the engine.  Except the mesh is being GCed
>> before that happens.  The JS is:
>>
>> "use strict";
>>
>> var root;
>>
>> function startup(scriptId) {
>>     var mesh = new ComponentMesh("triangle");
>>     mesh.addVertex(new Vertex(-1.0, -1.0, 0.0));
>>     mesh.addVertex(new Vertex( 1.0, -1.0, 0.0));
>>     mesh.addVertex(new Vertex( 0.0,  1.0, 0.0));
>>     mesh.addIndex(0);
>>     mesh.addIndex(1);
>>     mesh.addIndex(2);
>>
>>     root = new Entity("root");
>>     root.addComponent(mesh);
>> }
>>
>> function update(delta, event) {
>>     Engine.render(root);
>> }
>>
>> function shutdown() {
>> }
>>
>>
>> Why is 'root' being GCed?  The context for this script is Persistent<>
>> and I don't call Destroy()/Reset().
>>
>> The entire codebase is available to browse at
>> http://skunkworks.kangaroopunch.com/projects/magrathea/repository
>>
>> Help?  Please?  Thanks!
>>
>>
>> Scott
>>
>>
>> --
>> --
>> v8-users mailing list
>> [email protected]
>> <javascript:_e(%7B%7D,'cvml','[email protected]');>
>> http://groups.google.com/group/v8-users
>> ---
>> You received this message because you are subscribed to the Google Groups
>> "v8-users" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to [email protected]
>> <javascript:_e(%7B%7D,'cvml','v8-users%[email protected]');>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
> --
> --
> v8-users mailing list
> [email protected]
> <javascript:_e(%7B%7D,'cvml','[email protected]');>
> http://groups.google.com/group/v8-users
> ---
> You received this message because you are subscribed to the Google Groups
> "v8-users" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to [email protected]
> <javascript:_e(%7B%7D,'cvml','v8-users%[email protected]');>.
> For more options, visit https://groups.google.com/d/optout.
>

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

Reply via email to