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.
