Objective-C API: Fix over-releasing in allocateConstructorAndPrototypeWithSuperClassInfo:
authormhahnenberg@apple.com <mhahnenberg@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Mar 2013 21:41:55 +0000 (21:41 +0000)
committermhahnenberg@apple.com <mhahnenberg@apple.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Wed, 20 Mar 2013 21:41:55 +0000 (21:41 +0000)
commitc265696f6fd54e715d3ef8b9823eea2d26240d7d
tree55293677347fa682497cf3eb904fe0fa7af3a0df
parentb59c9cea381119dc393085e8178a00e320f063d5
Objective-C API: Fix over-releasing in allocateConstructorAndPrototypeWithSuperClassInfo:
https://bugs.webkit.org/show_bug.cgi?id=112832

Reviewed by Geoffrey Garen.

If either the m_constructor or m_prototype (but not both) is collected, we will call
allocateConstructorAndPrototypeWithSuperClassInfo, which will create a new object to replace the one
that was collected, but at the end of the method we call release on both of them.
This is incorrect since we autorelease the JSValue in the case that the object doesn't need to be
reallocated. Thus we'll end up overreleasing later during the drain of the autorelease pool.

* API/JSWrapperMap.mm:
(objectWithCustomBrand): We no longer alloc here. We instead call the JSValue valueWithValue class method,
which autoreleases for us.
(-[JSObjCClassInfo allocateConstructorAndPrototypeWithSuperClassInfo:]): We no longer call release on the
constructor or prototype JSValues.
* API/tests/testapi.mm: Added a new test that crashes on ToT due to over-releasing.

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@146392 268f45cc-cd09-0410-ab3c-d52691b4dbfc
Source/JavaScriptCore/API/JSWrapperMap.mm
Source/JavaScriptCore/API/tests/testapi.mm
Source/JavaScriptCore/ChangeLog