On Tue, Apr 18, 2017 at 7:32 AM, Gautham B A <[email protected]> wrote: > Hi all, > > I'm observing a memory leak when the script crashes at runtime. Here the > JavaScript code (made to crash on purpose by throwing Exception). > var res = new N1qlQuery('SELECT * FROM `sample`'); > throw 'error'; // purposefully crash. > > The corresponding C++ code for N1qlQuery is as follows - > void N1qlQuery(const v8::FunctionCallbackInfo<v8::Value> &args) { > v8::Isolate *isolate = v8::Isolate::GetCurrent(); > v8::HandleScope handleScope(isolate); > > v8::Local<v8::Name> query_name = v8::String::NewFromUtf8(isolate, > "query"); > v8::Local<v8::Value> empty_string = v8::String::NewFromUtf8(isolate, ""); > > v8::Local<v8::ObjectTemplate> obj = v8::ObjectTemplate::New(); > obj->Set(query_name, args[0]); > > args.GetReturnValue().Set(obj->NewInstance()); > } > > I believe obj->NewInstance() is causing the memory leak, because I've > observed no memory leak when the last line in C++ was commented out, even if > the JavaScript crashed. >> >> There is no memory leak when the script finishes execution without >> crashing. > > > Could anyone please tell me the right way to expose a JavaScript class? > (perhaps by avoiding a call to NewInstance() in C++). > > Thanks, > --Gautham
You should post full code if you want an answer but if I had to guess, it's that you have a `if (try_catch.HasCaught()) exit();` or the equivalent thereof in your code somewhere - i.e., termination without proper shutdown of the VM. Aside: you can use `args.GetIsolate()` instead of `Isolate::GetCurrent()`, it's a little faster, and you don't need a HandleScope, API callbacks have one implicitly. -- -- 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.
