Bug 219245 - [GStreamer] WebAudio provider should clean-up its bin when the client disappears
Summary: [GStreamer] WebAudio provider should clean-up its bin when the client disappears
Status: RESOLVED FIXED
Alias: None
Product: WebKit
Classification: Unclassified
Component: Platform (show other bugs)
Version: WebKit Nightly Build
Hardware: Unspecified Unspecified
: P2 Normal
Assignee: Philippe Normand
URL:
Keywords: InRadar
Depends on: 220112
Blocks:
  Show dependency treegraph
 
Reported: 2020-11-22 08:14 PST by Philippe Normand
Modified: 2021-01-08 05:18 PST (History)
15 users (show)

See Also:


Attachments
Sample trace for webrtc/peer-connection-audio-mute2.html (105.76 KB, text/plain)
2020-11-29 18:44 PST, Lauro Moura
no flags Details
Patch (19.49 KB, patch)
2020-12-24 08:35 PST, Philippe Normand
calvaris: review+
Details | Formatted Diff | Diff

Note You need to log in before you can comment on or make changes to this bug.
Description Philippe Normand 2020-11-22 08:14:23 PST
.
Comment 1 Lauro Moura 2020-11-29 18:44:45 PST
Created attachment 415000 [details]
Sample trace for webrtc/peer-connection-audio-mute2.html

webrtc/audio-replace-track.html
webrtc/peer-connection-audio-mute.html
webrtc/peer-connection-audio-mute2.html
webrtc/peer-connection-audio-unmute.html
webrtc/peer-connection-remote-audio-mute.html
webrtc/peer-connection-remote-audio-mute2.html

These tests are crashing in AudioSourceProviderGStreamer::setClient() since r270174

Stderr:

STDERR: Name 'deinterleave' is not unique in bin 'bin0', not adding
STDERR: 
STDERR: (WebKitWebProcess:37103): GStreamer-CRITICAL **: 05:45:23.709: gst_element_link_pads_full: assertion 'GST_IS_ELEMENT (dest)' failed
STDERR: LEAK: 1 WebPageProxy

Likely related to the early return when the client is null not cleaning up the bin, as stated in the comment in that revision pointing to this bug.

Sample trace (full attached):

Thread 1 (Thread 0x7f55b708a9c0 (LWP 37103)):
#0  g_logv (log_domain=0x7f55b9e43240 <g_log_domain_gstreamer> "GStreamer", log_level=G_LOG_LEVEL_CRITICAL, format=<optimized out>, args=<optimized out>) at ../glib/gmessages.c:1377
#1  0x00007f55b946aad3 in g_log (log_domain=<optimized out>, log_level=log_level@entry=G_LOG_LEVEL_CRITICAL, format=format@entry=0x7f55b94c08df "%s: assertion '%s' failed") at ../glib/gmessages.c:1415
#2  0x00007f55b946b2cd in g_return_if_fail_warning (log_domain=<optimized out>, pretty_function=pretty_function@entry=0x7f55b9e67220 <__func__.39> "gst_element_link_pads_full", expression=expression@entry=0x7f55b9e65e60 "GST_IS_ELEMENT (dest)") at ../glib/gmessages.c:2771
#3  0x00007f55b9e23746 in gst_element_link_pads_full (src=0x7f553c0e8fe0 [GstCapsFilter|capsfilter12], srcpadname=0x7f55d5804b14 "src", dest=Python Exception <class 'UnicodeDecodeError'> 'utf-8' codec can't decode byte 0xf0 in position 0: invalid continuation byte: 
, destpadname=0x7f55d5804b08 "sink", flags=GST_PAD_LINK_CHECK_NOTHING) at ../gst/gstutils.c:1814
#4  0x00007f55d0627471 in WebCore::AudioSourceProviderGStreamer::setClient(WebCore::AudioSourceProviderClient*) (this=0x7f55653902a0, client=0x7f5567486b68) at ../../Source/WebCore/platform/audio/gstreamer/AudioSourceProviderGStreamer.cpp:243
#5  0x00007f55d18762dc in WebCore::MediaStreamAudioSourceNode::MediaStreamAudioSourceNode(WebCore::BaseAudioContext&, WebCore::MediaStream&, WebCore::MediaStreamTrack&) (this=0x7f5567486aa0, context=..., mediaStream=..., audioTrack=...) at ../../Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.cpp:77
#6  0x00007f55d18760bc in WebCore::MediaStreamAudioSourceNode::create(WebCore::BaseAudioContext&, WebCore::MediaStreamAudioSourceOptions&&) (context=..., options=...) at ../../Source/WebCore/Modules/webaudio/MediaStreamAudioSourceNode.cpp:60
#7  0x00007f55d17e2dde in WebCore::AudioContext::createMediaStreamSource(WebCore::MediaStream&) (this=0x7f55674866b0, mediaStream=...) at ../../Source/WebCore/Modules/webaudio/AudioContext.cpp:509
#8  0x00007f55d3b4e91b in WebCore::jsAudioContextPrototypeFunction_createMediaStreamSourceBody(JSC::JSGlobalObject*, JSC::CallFrame*, WebCore::IDLOperation<WebCore::JSAudioContext>::ClassParameter) (lexicalGlobalObject=0x7f5549ecc068, callFrame=0x7ffe967a1030, castedThis=0x7f55653a1e78) at DerivedSources/WebCore/JSAudioContext.cpp:366
#9  0x00007f55d3b56e26 in WebCore::IDLOperation<WebCore::JSAudioContext>::call<WebCore::jsAudioContextPrototypeFunction_createMediaStreamSourceBody>(JSC::JSGlobalObject&, JSC::CallFrame&, char const*) (lexicalGlobalObject=..., callFrame=..., operationName=0x7f55d7cf50e5 "createMediaStreamSource") at ../../Source/WebCore/bindings/js/JSDOMOperation.h:53
#10 0x00007f55d3b4e9be in WebCore::jsAudioContextPrototypeFunction_createMediaStreamSource(JSC::JSGlobalObject*, JSC::CallFrame*) (lexicalGlobalObject=0x7f5549ecc068, callFrame=0x7ffe967a1030) at DerivedSources/WebCore/JSAudioContext.cpp:371
#11 0x00007f5576433178 in  ()
#12 0x00007ffe967a10d0 in  ()
#13 0x00007f55beb4f22a in llint_op_call () at /app/webkit/Source/JavaScriptCore/llint/LowLevelInterpreter.asm:1091
#14 0x0000000000000000 in  ()


Gardened in r270232.
Comment 2 Philippe Normand 2020-12-24 08:35:42 PST
Created attachment 416752 [details]
Patch
Comment 3 Philippe Normand 2021-01-08 05:17:04 PST
Committed r271290: <https://trac.webkit.org/changeset/271290>
Comment 4 Radar WebKit Bug Importer 2021-01-08 05:18:15 PST
<rdar://problem/72927558>