wasapisink: Possible heap corruption with exclusive mode
I'm seeing this when debugging in Visual Studio 2022. It only occurs when setting exclusive with wasapisink.
A breakpoint instruction (__debugbreak() statement or a similar call) was executed in strawberry.exe.
This happens here: https://gitlab.freedesktop.org/gstreamer/gstreamer/-/blob/main/subprojects/gst-plugins-bad/sys/wasapi/gstwasapisink.c?ref_type=heads#L222
ntdll.dll!00007ff8de2cf2d2() Unknown
ntdll.dll!00007ff8de2d8092() Unknown
ntdll.dll!00007ff8de2d837a() Unknown
ntdll.dll!00007ff8de2de001() Unknown
ntdll.dll!00007ff8de277442() Unknown
ntdll.dll!00007ff8de1f47b1() Unknown
> gstwasapi.dll!gst_wasapi_sink_finalize(_GObject * object) Line 222 C
gobject-2.0-0.dll!g_object_unref(void * _object) Line 4462 C
gstreamer-1.0-0.dll!gst_object_unref(void * object) Line 268 C
gstreamer-1.0-0.dll!gst_bin_remove_func(_GstBin * bin, _GstElement * element) Line 1819 C
gstreamer-1.0-0.dll!gst_bin_remove(_GstBin * bin, _GstElement * element) Line 1868 C
gstreamer-1.0-0.dll!gst_bin_dispose(_GObject * object) Line 528 C
gobject-2.0-0.dll!g_object_unref(void * _object) Line 4386 C
gstreamer-1.0-0.dll!gst_object_unref(void * object) Line 268 C
gstplayback.dll!gst_play_bin3_finalize(_GObject * object) Line 1132 C
gobject-2.0-0.dll!g_object_unref(void * _object) Line 4462 C
gstreamer-1.0-0.dll!gst_object_unref(void * object) Line 268 C
strawberry.exe!GstEnginePipeline::~GstEnginePipeline() Line 206 C++
strawberry.exe!GstEnginePipeline::`scalar deleting destructor'(unsigned int) C++
strawberry.exe!std::_Destroy_in_place<GstEnginePipeline>(GstEnginePipeline & _Obj) Line 313 C++
strawberry.exe!std::_Ref_count_obj2<GstEnginePipeline>::_Destroy() Line 2081 C++
strawberry.exe!std::_Ref_count_base::_Decref() Line 1150 C++
strawberry.exe!std::_Ptr_base<GstEnginePipeline>::_Decref() Line 1368 C++
strawberry.exe!std::shared_ptr<GstEnginePipeline>::~shared_ptr<GstEnginePipeline>() Line 1651 C++
strawberry.exe!std::shared_ptr<GstEnginePipeline>::reset() Line 1698 C++
strawberry.exe!GstEngine::Stop(const bool stop_after) Line 287 C++
strawberry.exe!Player::Stop(const bool stop_after) Line 563 C++
strawberry.exe!QtPrivate::FunctorCall<QtPrivate::IndexesList<0>,QtPrivate::List<bool>,void,void (__cdecl Player::*)(bool)>::call(void(Player::*)(bool) f, Player * o, void * * arg) Line 145 C++
strawberry.exe!QtPrivate::FunctionPointer<void (__cdecl Player::*)(bool)>::call<QtPrivate::List<bool>,void>(void(Player::*)(bool) f, Player * o, void * * arg) Line 183 C++
strawberry.exe!QtPrivate::QCallableObject<void (__cdecl Player::*)(bool),QtPrivate::List<bool>,void>::impl(int which, QtPrivate::QSlotObjectBase * this_, QObject * r, void * * a, bool * ret) Line 523 C++
Qt6Cored.dll!QtPrivate::QSlotObjectBase::call(QObject * r, void * * a) Line 433 C++
Qt6Cored.dll!doActivate<0>(QObject * sender, int signal_index, void * * argv) Line 4039 C++
Qt6Cored.dll!QMetaObject::activate(QObject * sender, const QMetaObject * m, int local_signal_index, void * * argv) Line 4100 C++
Qt6Guid.dll!QAction::triggered(bool _t1) Line 647 C++
Qt6Guid.dll!QAction::activate(QAction::ActionEvent event) Line 1103 C++
Qt6Guid.dll!QAction::trigger() Line 210 C++
Qt6Widgetsd.dll!QToolButton::nextCheckState() Line 972 C++
Qt6Widgetsd.dll!QAbstractButtonPrivate::click() Line 363 C++
Qt6Widgetsd.dll!QAbstractButton::mouseReleaseEvent(QMouseEvent * e) Line 975 C++
Qt6Widgetsd.dll!QToolButton::mouseReleaseEvent(QMouseEvent * e) Line 585 C++
Qt6Widgetsd.dll!QWidget::event(QEvent * event) Line 8960 C++
Qt6Widgetsd.dll!QAbstractButton::event(QEvent * e) Line 932 C++
Qt6Widgetsd.dll!QToolButton::event(QEvent * event) Line 988 C++
Qt6Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3296 C++
Qt6Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 2782 C++
Qt6Cored.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 1121 C++
Qt6Cored.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver, QEvent * event) Line 1554 C++
Qt6Widgetsd.dll!QApplicationPrivate::sendMouseEvent(QWidget * receiver, QMouseEvent * event, QWidget * alienWidget, QWidget * nativeWidget, QWidget * * buttonDown, QPointer<QWidget> & lastMouseReceiver, bool spontaneous, bool onlyDispatchEnterLeave) Line 2366 C++
Qt6Widgetsd.dll!QWidgetWindow::handleMouseEvent(QMouseEvent * event) Line 655 C++
Qt6Widgetsd.dll!QWidgetWindow::event(QEvent * event) Line 268 C++
Qt6Widgetsd.dll!QApplicationPrivate::notify_helper(QObject * receiver, QEvent * e) Line 3296 C++
Qt6Widgetsd.dll!QApplication::notify(QObject * receiver, QEvent * e) Line 3247 C++
Qt6Cored.dll!QCoreApplication::notifyInternal2(QObject * receiver, QEvent * event) Line 1121 C++
Qt6Cored.dll!QCoreApplication::sendSpontaneousEvent(QObject * receiver, QEvent * event) Line 1554 C++
Qt6Guid.dll!QGuiApplicationPrivate::processMouseEvent(QWindowSystemInterfacePrivate::MouseEvent * e) Line 2326 C++
Qt6Guid.dll!QGuiApplicationPrivate::processWindowSystemEvent(QWindowSystemInterfacePrivate::WindowSystemEvent * e) Line 2070 C++
Qt6Guid.dll!QWindowSystemInterface::sendWindowSystemEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 1115 C++
Qt6Guid.dll!QWindowsGuiEventDispatcher::sendPostedEvents() Line 45 C++
Qt6Cored.dll!QEventDispatcherWin32::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 471 C++
Qt6Guid.dll!QWindowsGuiEventDispatcher::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 36 C++
Qt6Cored.dll!QEventLoop::processEvents(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 101 C++
Qt6Cored.dll!QEventLoop::exec(QFlags<enum QEventLoop::ProcessEventsFlag> flags) Line 182 C++
Qt6Cored.dll!QCoreApplication::exec() Line 1442 C++
strawberry.exe!main(int argc, char * * argv) Line 321 C++
strawberry.exe!invoke_main() Line 79 C++
strawberry.exe!__scrt_common_main_seh() Line 288 C++
strawberry.exe!__scrt_common_main() Line 331 C++
strawberry.exe!mainCRTStartup(void * __formal) Line 17 C++
kernel32.dll!00007ff8dca47344() Unknown
ntdll.dll!00007ff8de2226b1() Unknown