Changeset 264648 in webkit
- Timestamp:
- Jul 21, 2020, 2:03:00 AM (6 years ago)
- Location:
- trunk
- Files:
-
- 4 edited
-
LayoutTests/ChangeLog (modified) (1 diff)
-
LayoutTests/platform/glib/TestExpectations (modified) (1 diff)
-
Source/WebCore/ChangeLog (modified) (1 diff)
-
Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp (modified) (11 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r264646 r264648 1 2020-07-21 Xabier Rodriguez Calvar <calvaris@igalia.com> 2 3 [GStreamer][1.18] mediastreamsrc element hits assert in gst -core 4 https://bugs.webkit.org/show_bug.cgi?id=214150 5 6 Reviewed by Philippe Normand. 7 8 As result of this bug 9 fast/mediastream/MediaStream-removeTrack-while-playing.html begins 10 to crash in debug mode in an assertion. When a track is removed 11 the observer is not removed and when it dies there are null 12 objects in the observer weak hash set. Still, if you do a quick 13 patch to remove the observer, things can still crash as track 14 removal is racy and in release there' other crash. All this needs 15 to be taclked as a general approach to fix track removal. 16 17 * platform/glib/TestExpectations: Added 18 fast/mediastream/MediaStream-removeTrack-while-playing.html as 19 Pass Crash for release and crash for debug. 20 1 21 2020-07-21 Carlos Garcia Campos <cgarcia@igalia.com> 2 22 -
trunk/LayoutTests/platform/glib/TestExpectations
r264595 r264648 194 194 webkit.org/b/187603 fast/mediastream/media-stream-track-source-failure.html [ Timeout Failure Pass ] 195 195 webkit.org/b/191886 webkit.org/b/210800 fast/mediastream/MediaStream-video-element-remove-track.html [ Failure Crash ] 196 webkit.org/b/191886 webkit.org/b/210800 [ Release ] fast/mediastream/MediaStream-removeTrack-while-playing.html [ Pass Crash ] 197 webkit.org/b/191886 webkit.org/b/210800 [ Debug ] fast/mediastream/MediaStream-removeTrack-while-playing.html [ Crash ] 196 198 webkit.org/b/199440 fast/mediastream/mediastreamtrack-video-clone.html [ Crash Pass ] 197 199 webkit.org/b/210337 fast/mediastream/mediastreamtrack-audio-clone.html [ Failure Pass ] -
trunk/Source/WebCore/ChangeLog
r264646 r264648 1 2020-07-21 Xabier Rodriguez Calvar <calvaris@igalia.com> 2 3 [GStreamer][1.18] mediastreamsrc element hits assert in gst -core 4 https://bugs.webkit.org/show_bug.cgi?id=214150 5 6 Reviewed by Philippe Normand. 7 8 Removed track pointers from observers cause the object was 9 self-referencing a couple of times. Observers are 1-1 with the 10 source so there is no need to keep an owned reference and there is 11 no danger of incorrect dereferencing. 12 13 Turned finalize into dispose as the work is doing is more removing 14 the references with other objects, which what the dispose is 15 about. Called the parent on that, which as missing as well. 16 17 * platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp: 18 (WebKitMediaStreamTrackObserver::WebKitMediaStreamTrackObserver): 19 (WebKitMediaStreamObserver::WebKitMediaStreamObserver): 20 (webkitMediaStreamSrcConstructed): 21 (webkitMediaStreamSrcDispose): 22 (webkit_media_stream_src_class_init): 23 1 24 2020-07-21 Carlos Garcia Campos <cgarcia@igalia.com> 2 25 -
trunk/Source/WebCore/platform/mediastream/gstreamer/GStreamerMediaStreamSource.cpp
r264607 r264648 101 101 public: 102 102 virtual ~WebKitMediaStreamTrackObserver() { }; 103 WebKitMediaStreamTrackObserver(G RefPtr<GstElement>&&src)104 : m_src( WTFMove(src)) { }103 WebKitMediaStreamTrackObserver(GstElement* src) 104 : m_src(src) { } 105 105 void trackStarted(MediaStreamTrackPrivate&) final { }; 106 106 … … 108 108 { 109 109 if (m_src) 110 webkitMediaStreamSrcTrackEnded(WEBKIT_MEDIA_STREAM_SRC(m_src .get()), track);110 webkitMediaStreamSrcTrackEnded(WEBKIT_MEDIA_STREAM_SRC(m_src), track); 111 111 } 112 112 … … 126 126 127 127 auto* gstSample = static_cast<MediaSampleGStreamer*>(&sample)->platformSample().sample.gstSample; 128 webkitMediaStreamSrcPushVideoSample(WEBKIT_MEDIA_STREAM_SRC(m_src .get()), gstSample);128 webkitMediaStreamSrcPushVideoSample(WEBKIT_MEDIA_STREAM_SRC(m_src), gstSample); 129 129 } 130 130 … … 135 135 136 136 auto data = static_cast<const GStreamerAudioData&>(audioData); 137 webkitMediaStreamSrcPushAudioSample(WEBKIT_MEDIA_STREAM_SRC(m_src .get()), data.getSample());137 webkitMediaStreamSrcPushAudioSample(WEBKIT_MEDIA_STREAM_SRC(m_src), data.getSample()); 138 138 } 139 139 140 140 private: 141 G RefPtr<GstElement>m_src;141 GstElement* m_src; 142 142 bool m_enabled { true }; 143 143 }; … … 147 147 public: 148 148 virtual ~WebKitMediaStreamObserver() { }; 149 WebKitMediaStreamObserver(G RefPtr<GstElement>&&src)150 : m_src( WTFMove(src)) { }149 WebKitMediaStreamObserver(GstElement* src) 150 : m_src(src) { } 151 151 152 152 void characteristicsChanged() final 153 153 { 154 154 if (m_src) 155 GST_DEBUG_OBJECT(m_src .get(), "renegotiation should happen");155 GST_DEBUG_OBJECT(m_src, "renegotiation should happen"); 156 156 } 157 157 void activeStatusChanged() final { } … … 160 160 { 161 161 if (m_src) 162 webkitMediaStreamSrcAddTrack(WEBKIT_MEDIA_STREAM_SRC(m_src .get()), &track, false);162 webkitMediaStreamSrcAddTrack(WEBKIT_MEDIA_STREAM_SRC(m_src), &track, false); 163 163 } 164 164 … … 166 166 { 167 167 if (m_src) 168 webkitMediaStreamSrcRemoveTrackByType(WEBKIT_MEDIA_STREAM_SRC(m_src .get()), track.type());168 webkitMediaStreamSrcRemoveTrackByType(WEBKIT_MEDIA_STREAM_SRC(m_src), track.type()); 169 169 } 170 170 171 171 private: 172 G RefPtr<GstElement>m_src;172 GstElement* m_src; 173 173 }; 174 174 … … 341 341 auto* priv = self->priv; 342 342 343 priv->mediaStreamTrackObserver = makeUnique<WebKitMediaStreamTrackObserver>(GST_ELEMENT_CAST( gst_object_ref(self)));344 priv->mediaStreamObserver = makeUnique<WebKitMediaStreamObserver>(GST_ELEMENT_CAST( gst_object_ref(self)));343 priv->mediaStreamTrackObserver = makeUnique<WebKitMediaStreamTrackObserver>(GST_ELEMENT_CAST(self)); 344 priv->mediaStreamObserver = makeUnique<WebKitMediaStreamObserver>(GST_ELEMENT_CAST(self)); 345 345 priv->flowCombiner = GUniquePtr<GstFlowCombiner>(gst_flow_combiner_new()); 346 347 // https://bugs.webkit.org/show_bug.cgi?id=214150 348 ASSERT(GST_OBJECT_REFCOUNT(self) == 1); 349 ASSERT(g_object_is_floating(self)); 346 350 } 347 351 … … 364 368 } 365 369 366 static void webkitMediaStreamSrc Finalize(GObject* object)370 static void webkitMediaStreamSrcDispose(GObject* object) 367 371 { 368 372 WebKitMediaStreamSrc* self = WEBKIT_MEDIA_STREAM_SRC(object); … … 376 380 priv->stream = nullptr; 377 381 } 382 priv->track = nullptr; 378 383 GST_OBJECT_UNLOCK(self); 384 385 GST_CALL_PARENT(G_OBJECT_CLASS, dispose, (object)); 379 386 } 380 387 … … 402 409 403 410 gobjectClass->constructed = webkitMediaStreamSrcConstructed; 404 gobjectClass-> finalize = webkitMediaStreamSrcFinalize;411 gobjectClass->dispose = webkitMediaStreamSrcDispose; 405 412 gobjectClass->get_property = webkitMediaStreamSrcGetProperty; 406 413 gobjectClass->set_property = webkitMediaStreamSrcSetProperty;
Note:
See TracChangeset
for help on using the changeset viewer.