Bug 93342 - [V8] Remove a bunch of Persistent::New()s on setJSWrapperForXXXObject()
Summary: [V8] Remove a bunch of Persistent::New()s on setJSWrapperForXXXObject()
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: WebCore JavaScript (show other bugs)
Version: 528+ (Nightly build)
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Kentaro Hara
URL:
Keywords:
Depends on:
Blocks: 93095
  Show dependency treegraph
 
Reported: 2012-08-07 00:03 PDT by Kentaro Hara
Modified: 2012-08-07 19:09 PDT (History)
5 users (show)

See Also:


Attachments
Patch (41.99 KB, patch)
2012-08-07 00:07 PDT, Kentaro Hara
no flags Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Kentaro Hara 2012-08-07 00:03:59 PDT
There are a lot of custom bindings like this:

    V8DOMWrapper::setJSWrapperForDOMObject(impl.release(), v8::Persistent<v8::Object>::New(args.Holder()));

Manually written Persistent::New() is error-prone. We can remove the Persistent::New() by allocating the Persistent handle inside setJSWrapperForDOMObject().
Comment 1 Kentaro Hara 2012-08-07 00:07:58 PDT
Created attachment 156883 [details]
Patch
Comment 2 Adam Barth 2012-08-07 00:12:05 PDT
Comment on attachment 156883 [details]
Patch

Ok.  Are you sure you got them all?  If we missed one, we'll create a leak.
Comment 3 Kentaro Hara 2012-08-07 00:17:29 PDT
(In reply to comment #2)
> (From update of attachment 156883 [details])
> Ok.  Are you sure you got them all?  If we missed one, we'll create a leak.

Looks OK. Let me land the patch tomorrow.

$ grep -r setJSWrapper WebCore/bindings/v8/* | grep Persistent
V8DOMWrapper.cpp:v8::Persistent<v8::Object> V8DOMWrapper::setJSWrapperForDOMNode(PassRefPtr<Node> node, v8::Handle<v8::Object> wrapper, v8::Isolate* isolate)
V8DOMWrapper.cpp:v8::Persistent<v8::Object> V8DOMWrapper::setJSWrapperForActiveDOMNode(PassRefPtr<Node> node, v8::Handle<v8::Object> wrapper, v8::Isolate* isolate)
V8DOMWrapper.h:        static v8::Persistent<v8::Object> setJSWrapperForDOMObject(PassRefPtr<T>, v8::Handle<v8::Object>, v8::Isolate* = 0);
V8DOMWrapper.h:        static v8::Persistent<v8::Object> setJSWrapperForActiveDOMObject(PassRefPtr<T>, v8::Handle<v8::Object>, v8::Isolate* = 0);
V8DOMWrapper.h:        static v8::Persistent<v8::Object> setJSWrapperForDOMNode(PassRefPtr<Node>, v8::Handle<v8::Object>, v8::Isolate* = 0);
V8DOMWrapper.h:        static v8::Persistent<v8::Object> setJSWrapperForActiveDOMNode(PassRefPtr<Node>, v8::Handle<v8::Object>, v8::Isolate* = 0);
V8DOMWrapper.h:    v8::Persistent<v8::Object> V8DOMWrapper::setJSWrapperForDOMObject(PassRefPtr<T> object, v8::Handle<v8::Object> wrapper, v8::Isolate* isolate)
V8DOMWrapper.h:    v8::Persistent<v8::Object> V8DOMWrapper::setJSWrapperForActiveDOMObject(PassRefPtr<T> object, v8::Handle<v8::Object> wrapper, v8::Isolate* isolate)
custom/V8ArrayBufferViewCustom.h:    v8::Persistent<v8::Object> wrapperHandle = V8DOMWrapper::setJSWrapperForDOMObject(array.release(), wrapper);
custom/V8ArrayBufferViewCustom.h:    v8::Persistent<v8::Object> wrapperHandle = V8DOMWrapper::setJSWrapperForDOMObject(array.release(), wrapper);
Comment 4 WebKit Review Bot 2012-08-07 19:09:20 PDT
Comment on attachment 156883 [details]
Patch

Clearing flags on attachment: 156883

Committed r124968: <http://trac.webkit.org/changeset/124968>
Comment 5 WebKit Review Bot 2012-08-07 19:09:24 PDT
All reviewed patches have been landed.  Closing bug.