Title: [157673] trunk
Revision
157673
Author
[email protected]
Date
2013-10-19 12:55:32 -0700 (Sat, 19 Oct 2013)

Log Message

RefPtr::releaseNonNull() incorrectly increments the refcount.
<https://webkit.org/b/123063>

Source/WTF:

Make releaseNonNull() use adoptRef(T&), mirroring release().

Reviewed by Anders Carlsson.

Tools:

Add an API test to verify that no extra refs are added when calling
RefPtr::releaseNonNull().

Reviewed by Anders Carlsson.

Modified Paths

Diff

Modified: trunk/Source/WTF/ChangeLog (157672 => 157673)


--- trunk/Source/WTF/ChangeLog	2013-10-19 16:48:42 UTC (rev 157672)
+++ trunk/Source/WTF/ChangeLog	2013-10-19 19:55:32 UTC (rev 157673)
@@ -1,3 +1,12 @@
+2013-10-19  Andreas Kling  <[email protected]>
+
+        RefPtr::releaseNonNull() incorrectly increments the refcount.
+        <https://webkit.org/b/123063>
+
+        Make releaseNonNull() use adoptRef(T&), mirroring release().
+
+        Reviewed by Anders Carlsson.
+
 2013-10-18  Andreas Kling  <[email protected]>
 
         Start passing RenderStyle around with PassRef.

Modified: trunk/Source/WTF/wtf/RefPtr.h (157672 => 157673)


--- trunk/Source/WTF/wtf/RefPtr.h	2013-10-19 16:48:42 UTC (rev 157672)
+++ trunk/Source/WTF/wtf/RefPtr.h	2013-10-19 19:55:32 UTC (rev 157673)
@@ -58,7 +58,7 @@
         
         void clear();
         PassRefPtr<T> release() { PassRefPtr<T> tmp = adoptRef(m_ptr); m_ptr = nullptr; return tmp; }
-        PassRef<T> releaseNonNull() { ASSERT(m_ptr); PassRef<T> tmp(*m_ptr); m_ptr = nullptr; return tmp; }
+        PassRef<T> releaseNonNull() { ASSERT(m_ptr); PassRef<T> tmp = adoptRef(*m_ptr); m_ptr = nullptr; return tmp; }
 
         T& operator*() const { return *m_ptr; }
         ALWAYS_INLINE T* operator->() const { return m_ptr; }

Modified: trunk/Tools/ChangeLog (157672 => 157673)


--- trunk/Tools/ChangeLog	2013-10-19 16:48:42 UTC (rev 157672)
+++ trunk/Tools/ChangeLog	2013-10-19 19:55:32 UTC (rev 157673)
@@ -1,3 +1,13 @@
+2013-10-19  Andreas Kling  <[email protected]>
+
+        RefPtr::releaseNonNull() incorrectly increments the refcount.
+        <https://webkit.org/b/123063>
+
+        Add an API test to verify that no extra refs are added when calling
+        RefPtr::releaseNonNull().
+
+        Reviewed by Anders Carlsson.
+
 2013-10-18  Rik Cabanier <[email protected]>
         Add Rik Cabanier to list of committers
         https://bugs.webkit.org/show_bug.cgi?id=123031

Modified: trunk/Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp (157672 => 157673)


--- trunk/Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp	2013-10-19 16:48:42 UTC (rev 157672)
+++ trunk/Tools/TestWebKitAPI/Tests/WTF/RefPtr.cpp	2013-10-19 19:55:32 UTC (rev 157673)
@@ -306,6 +306,18 @@
     ASSERT_STREQ("ref(a) ref(b) | deref(a) deref(b) ", takeLogStr().c_str());
 }
 
+TEST(WTF_RefPtr, ReleaseNonNull)
+{
+    RefLogger a("a");
+
+    {
+        RefPtr<RefLogger> refPtr = &a;
+        RefPtr<RefLogger> ref = refPtr.releaseNonNull();
+    }
+
+    ASSERT_STREQ("ref(a) deref(a) ", takeLogStr().c_str());
+}
+
 TEST(WTF_RefPtr, Release)
 {
     DerivedRefLogger a("a");
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to