You are a genius. I simply placed all the objects (excluding the Isolate) in a sub-block and then called dispose after this sub-block (thus forcing the other objects' destructors before the call to Dispose()).
It even got rid of all the memory leak issues with valgrind. Any explanation on what was going on underneath (or better yet a link explaining whats going on under the hood)? Thank you. On Mon, Apr 21, 2014 at 1:07 PM, Ben Noordhuis <[email protected]> wrote: > On Mon, Apr 21, 2014 at 2:45 AM, David Wardell <[email protected]> > wrote: > > Hi all. > > > > I tried to research the topic first, so if it has already been posted > please > > forgive me. > > > > Running Linux on x64 and I can use V8 (which I built from source) just > fine. > > However, when I run the hello_world code provided here against valgrid I > > find memory leaks: > > > >> > >> ==4240== Memcheck, a memory error detector > >> ==4240== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. > >> ==4240== Using Valgrind-3.10.0.SVN and LibVEX; rerun with -h for > copyright > >> info > >> ==4240== Command: ./hello_world > >> ==4240== > >> ==4240== Warning: set address range perms: large range [0x20ad2ae19000, > >> 0x20ad4ae19000) (noaccess) > >> Hello, World! > >> ==4240== > >> ==4240== HEAP SUMMARY: > >> ==4240== in use at exit: 331,256 bytes in 162 blocks > >> ==4240== total heap usage: 272 allocs, 110 frees, 1,034,898 bytes > >> allocated > >> ==4240== > >> ==4240== 104 bytes in 1 blocks are possibly lost in loss record 88 of > 142 > >> ==4240== at 0x4C2B800: operator new[](unsigned long) (in > >> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) > >> ==4240== by 0x465090: > >> v8::internal::Debugger::Debugger(v8::internal::Isolate*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x575514: > >> v8::internal::Isolate::Init(v8::internal::Deserializer*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x6B48D0: v8::internal::Snapshot::Initialize(char const*) > >> (in /home/david/opt/v8/hello_world) > >> ==4240== by 0x406CEE: > >> v8::EnsureInitializedForIsolate(v8::internal::Isolate*, char const*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x4182E3: v8::Context::New(v8::Isolate*, > >> v8::ExtensionConfiguration*, v8::Handle<v8::ObjectTemplate>, > >> v8::Handle<v8::Value>) (in /home/david/opt/v8/hello_world) > >> ==4240== by 0x40501A: main (in /home/david/opt/v8/hello_world) > >> ==4240== > >> ==4240== 104 bytes in 1 blocks are possibly lost in loss record 89 of > 142 > >> ==4240== at 0x4C2B800: operator new[](unsigned long) (in > >> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) > >> ==4240== by 0x465157: > >> v8::internal::Debugger::Debugger(v8::internal::Isolate*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x575514: > >> v8::internal::Isolate::Init(v8::internal::Deserializer*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x6B48D0: v8::internal::Snapshot::Initialize(char const*) > >> (in /home/david/opt/v8/hello_world) > >> ==4240== by 0x406CEE: > >> v8::EnsureInitializedForIsolate(v8::internal::Isolate*, char const*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x4182E3: v8::Context::New(v8::Isolate*, > >> v8::ExtensionConfiguration*, v8::Handle<v8::ObjectTemplate>, > >> v8::Handle<v8::Value>) (in /home/david/opt/v8/hello_world) > >> ==4240== by 0x40501A: main (in /home/david/opt/v8/hello_world) > >> ==4240== > >> ==4240== 288 bytes in 1 blocks are possibly lost in loss record 106 of > 142 > >> ==4240== at 0x4C2CC70: calloc (in > >> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) > >> ==4240== by 0x4012E54: _dl_allocate_tls (dl-tls.c:296) > >> ==4240== by 0x5047DA0: pthread_create@@GLIBC_2.2.5 > >> (allocatestack.c:589) > >> ==4240== by 0x7768A4: v8::internal::Thread::Start() (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x5756C9: > >> v8::internal::Isolate::Init(v8::internal::Deserializer*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x6B48D0: v8::internal::Snapshot::Initialize(char const*) > >> (in /home/david/opt/v8/hello_world) > >> ==4240== by 0x406CEE: > >> v8::EnsureInitializedForIsolate(v8::internal::Isolate*, char const*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x4182E3: v8::Context::New(v8::Isolate*, > >> v8::ExtensionConfiguration*, v8::Handle<v8::ObjectTemplate>, > >> v8::Handle<v8::Value>) (in /home/david/opt/v8/hello_world) > >> ==4240== by 0x40501A: main (in /home/david/opt/v8/hello_world) > >> ==4240== > >> ==4240== 576 bytes in 2 blocks are possibly lost in loss record 121 of > 142 > >> ==4240== at 0x4C2CC70: calloc (in > >> /usr/lib/valgrind/vgpreload_memcheck-amd64-linux.so) > >> ==4240== by 0x4012E54: _dl_allocate_tls (dl-tls.c:296) > >> ==4240== by 0x5047DA0: pthread_create@@GLIBC_2.2.5 > >> (allocatestack.c:589) > >> ==4240== by 0x7768A4: v8::internal::Thread::Start() (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x57526A: > >> v8::internal::Isolate::Init(v8::internal::Deserializer*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x6B48D0: v8::internal::Snapshot::Initialize(char const*) > >> (in /home/david/opt/v8/hello_world) > >> ==4240== by 0x406CEE: > >> v8::EnsureInitializedForIsolate(v8::internal::Isolate*, char const*) (in > >> /home/david/opt/v8/hello_world) > >> ==4240== by 0x4182E3: v8::Context::New(v8::Isolate*, > >> v8::ExtensionConfiguration*, v8::Handle<v8::ObjectTemplate>, > >> v8::Handle<v8::Value>) (in /home/david/opt/v8/hello_world) > >> ==4240== by 0x40501A: main (in /home/david/opt/v8/hello_world) > >> ==4240== > >> ==4240== LEAK SUMMARY: > >> ==4240== definitely lost: 0 bytes in 0 blocks > >> ==4240== indirectly lost: 0 bytes in 0 blocks > >> ==4240== possibly lost: 1,072 bytes in 5 blocks > >> ==4240== still reachable: 330,184 bytes in 157 blocks > >> ==4240== suppressed: 0 bytes in 0 blocks > >> ==4240== Reachable blocks (those to which a pointer was found) are not > >> shown. > >> ==4240== To see them, rerun with: --leak-check=full > --show-leak-kinds=all > >> ==4240== > >> ==4240== For counts of detected and suppressed errors, rerun with: -v > >> ==4240== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0) > >> > > > > I researched and found this post which describes the issue (with win32) > and > > how he mostly solved it with V8::Dispose(). > > > > However, whenever I run the hello_world program with Dispose() (as the > last > > function called in the program) it causes a segmentation fault. It seems > to > > be seg-faulting after the call to Dispose() returns (I assume some > > destructor is attempting to access memory cleaned up by Dispose()). > > > > What am I doing wrong? > > > > Thanks for any help. > > If you're using something like Context::Scope, make sure that the > object is properly scoped, i.e. that it is destructed before you call > V8::Dispose(). > > If it's not that, try a debug build. It has a ton more checks, that > will usually help flush out the bug. > > -- > -- > v8-users mailing list > [email protected] > http://groups.google.com/group/v8-users > --- > You received this message because you are subscribed to a topic in the > Google Groups "v8-users" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/v8-users/1o_5qrOeOKU/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [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.
