Title: [203159] trunk/Source/WebCore
Revision
203159
Author
[email protected]
Date
2016-07-13 05:03:28 -0700 (Wed, 13 Jul 2016)

Log Message

[GStreamer][GL] crash within triggerRepaint
https://bugs.webkit.org/show_bug.cgi?id=159552

Reviewed by Xabier Rodriguez-Calvar.

Revert the un-needed changes introduced in r203056 and use the
MainThreadNotifier without redundant checks.

* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
(WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
(WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
(WebCore::MediaPlayerPrivateGStreamer::createWeakPtr):
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
(WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
(WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
* platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
(WebCore::MediaPlayerPrivateGStreamerBase::createWeakPtr): Deleted.

Modified Paths

Diff

Modified: trunk/Source/WebCore/ChangeLog (203158 => 203159)


--- trunk/Source/WebCore/ChangeLog	2016-07-13 11:37:48 UTC (rev 203158)
+++ trunk/Source/WebCore/ChangeLog	2016-07-13 12:03:28 UTC (rev 203159)
@@ -1,3 +1,24 @@
+2016-07-13  Philippe Normand  <[email protected]>
+
+        [GStreamer][GL] crash within triggerRepaint
+        https://bugs.webkit.org/show_bug.cgi?id=159552
+
+        Reviewed by Xabier Rodriguez-Calvar.
+
+        Revert the un-needed changes introduced in r203056 and use the
+        MainThreadNotifier without redundant checks.
+
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp:
+        (WebCore::MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer):
+        (WebCore::MediaPlayerPrivateGStreamer::createGSTPlayBin):
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h:
+        (WebCore::MediaPlayerPrivateGStreamer::createWeakPtr):
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp:
+        (WebCore::MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase):
+        (WebCore::MediaPlayerPrivateGStreamerBase::triggerRepaint):
+        * platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h:
+        (WebCore::MediaPlayerPrivateGStreamerBase::createWeakPtr): Deleted.
+
 2016-07-13  Carlos Garcia Campos  <[email protected]>
 
         Unreviewed. Fix GObject DOM bindings API breaks after r203047-

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp (203158 => 203159)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2016-07-13 11:37:48 UTC (rev 203158)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.cpp	2016-07-13 12:03:28 UTC (rev 203159)
@@ -132,6 +132,7 @@
 
 MediaPlayerPrivateGStreamer::MediaPlayerPrivateGStreamer(MediaPlayer* player)
     : MediaPlayerPrivateGStreamerBase(player)
+    , m_weakPtrFactory(this)
     , m_source(0)
     , m_seekTime(0)
     , m_changingRate(false)
@@ -1928,10 +1929,8 @@
             GRefPtr<GstMessage> protectedMessage(message);
             auto weakThis = player.createWeakPtr();
             RunLoop::main().dispatch([weakThis, protectedMessage] {
-                if (weakThis) {
-                    auto* player = reinterpret_cast<MediaPlayerPrivateGStreamer*>(weakThis.get());
-                    player->handleMessage(protectedMessage.get());
-                }
+                if (weakThis)
+                    weakThis->handleMessage(protectedMessage.get());
             });
         }
         gst_message_unref(message);

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h (203158 => 203159)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h	2016-07-13 11:37:48 UTC (rev 203158)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamer.h	2016-07-13 12:03:28 UTC (rev 203159)
@@ -34,6 +34,7 @@
 #include <gst/pbutils/install-plugins.h>
 #include <wtf/Forward.h>
 #include <wtf/RunLoop.h>
+#include <wtf/WeakPtr.h>
 
 #if ENABLE(VIDEO_TRACK) && USE(GSTREAMER_MPEGTS)
 #include <wtf/text/AtomicStringHash.h>
@@ -130,6 +131,8 @@
 
     static bool isAvailable();
 
+    WeakPtr<MediaPlayerPrivateGStreamer> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
+
     GstElement* createAudioSink() override;
 
     float playbackPosition() const;
@@ -191,6 +194,8 @@
     static GstFlowReturn newTextSampleCallback(MediaPlayerPrivateGStreamer*);
 #endif
 
+    WeakPtrFactory<MediaPlayerPrivateGStreamer> m_weakPtrFactory;
+
     GRefPtr<GstElement> m_source;
 #if ENABLE(VIDEO_TRACK)
     GRefPtr<GstElement> m_textAppSink;

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp (203158 => 203159)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp	2016-07-13 11:37:48 UTC (rev 203158)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.cpp	2016-07-13 12:03:28 UTC (rev 203159)
@@ -146,8 +146,7 @@
 #endif // USE(COORDINATED_GRAPHICS_THREADED) && USE(GSTREAMER_GL)
 
 MediaPlayerPrivateGStreamerBase::MediaPlayerPrivateGStreamerBase(MediaPlayer* player)
-    : m_weakPtrFactory(this)
-    , m_player(player)
+    : m_player(player)
     , m_fpsSink(0)
     , m_readyState(MediaPlayer::HaveNothing)
     , m_networkState(MediaPlayer::Empty)
@@ -551,15 +550,7 @@
 
     if (triggerResize) {
         GST_DEBUG("First sample reached the sink, triggering video dimensions update");
-        if (isMainThread())
-            m_player->sizeChanged();
-        else {
-            auto weakThis = createWeakPtr();
-            m_notifier.notify(MainThreadNotification::SizeChanged, [weakThis] {
-                if (weakThis)
-                    weakThis->m_player->sizeChanged();
-            });
-        }
+        m_notifier.notify(MainThreadNotification::SizeChanged, [this] { m_player->sizeChanged(); });
     }
 
 #if USE(COORDINATED_GRAPHICS_THREADED)

Modified: trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h (203158 => 203159)


--- trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h	2016-07-13 11:37:48 UTC (rev 203158)
+++ trunk/Source/WebCore/platform/graphics/gstreamer/MediaPlayerPrivateGStreamerBase.h	2016-07-13 12:03:28 UTC (rev 203159)
@@ -33,7 +33,6 @@
 #include <wtf/Condition.h>
 #include <wtf/Forward.h>
 #include <wtf/RunLoop.h>
-#include <wtf/WeakPtr.h>
 
 #if USE(TEXTURE_MAPPER)
 #include "TextureMapperPlatformLayer.h"
@@ -127,10 +126,6 @@
 
 protected:
     MediaPlayerPrivateGStreamerBase(MediaPlayer*);
-
-    WeakPtrFactory<MediaPlayerPrivateGStreamerBase> m_weakPtrFactory;
-    WeakPtr<MediaPlayerPrivateGStreamerBase> createWeakPtr() { return m_weakPtrFactory.createWeakPtr(); }
-
     virtual GstElement* createVideoSink();
 
 #if USE(GSTREAMER_GL)
_______________________________________________
webkit-changes mailing list
[email protected]
https://lists.webkit.org/mailman/listinfo/webkit-changes

Reply via email to