osxaudio: Avoid dangling pointer on shutdown

When tearing down the elements we were still referring to the ringbuffer unique_id
as our property while it was already freed, leading to potential segfaults when
accessing the property.

Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/7498>
This commit is contained in:
Thibault Saunier 2024-08-29 12:10:23 -04:00 committed by GStreamer Marge Bot
parent cb5203efea
commit b789d53b22
2 changed files with 16 additions and 0 deletions

View file

@ -237,6 +237,11 @@ gst_osx_audio_sink_change_state (GstElement * element,
GstStateChangeReturn ret;
switch (transition) {
case GST_STATE_CHANGE_READY_TO_NULL:
GST_OBJECT_LOCK (osxsink);
osxsink->device_id = kAudioDeviceUnknown;
GST_OBJECT_UNLOCK (osxsink);
break;
default:
break;
}
@ -254,7 +259,9 @@ gst_osx_audio_sink_change_state (GstElement * element,
ringbuffer =
GST_OSX_AUDIO_RING_BUFFER (GST_AUDIO_BASE_SINK (osxsink)->ringbuffer);
if (ringbuffer->core_audio->device_id != osxsink->device_id) {
GST_OBJECT_LOCK (osxsink);
osxsink->device_id = ringbuffer->core_audio->device_id;
GST_OBJECT_UNLOCK (osxsink);
g_object_notify (G_OBJECT (osxsink), "device");
}
break;

View file

@ -208,6 +208,12 @@ gst_osx_audio_src_change_state (GstElement * element, GstStateChange transition)
GstStateChangeReturn ret;
switch (transition) {
case GST_STATE_CHANGE_READY_TO_NULL:{
GST_OBJECT_LOCK (osxsrc);
osxsrc->device_id = kAudioDeviceUnknown;
GST_OBJECT_UNLOCK (osxsrc);
break;
}
default:
break;
}
@ -222,7 +228,10 @@ gst_osx_audio_src_change_state (GstElement * element, GstStateChange transition)
ringbuffer =
GST_OSX_AUDIO_RING_BUFFER (GST_AUDIO_BASE_SRC (osxsrc)->ringbuffer);
if (ringbuffer->core_audio->device_id != osxsrc->device_id) {
GST_OBJECT_LOCK (osxsrc);
osxsrc->device_id = ringbuffer->core_audio->device_id;
GST_OBJECT_UNLOCK (osxsrc);
g_object_notify (G_OBJECT (osxsrc), "device");
}
break;