From efed4a07ef43844a5f9d76fa88a7c5d9b7d38568 Mon Sep 17 00:00:00 2001 From: jackun Date: Tue, 12 Jan 2021 00:07:16 +0200 Subject: [PATCH] USB: safe_release dshow filters Pausing/resuming could cause double-release. --- pcsx2/USB/usb-eyetoy/cam-windows.cpp | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) diff --git a/pcsx2/USB/usb-eyetoy/cam-windows.cpp b/pcsx2/USB/usb-eyetoy/cam-windows.cpp index 2617ad5f60..679e923544 100644 --- a/pcsx2/USB/usb-eyetoy/cam-windows.cpp +++ b/pcsx2/USB/usb-eyetoy/cam-windows.cpp @@ -444,28 +444,24 @@ namespace usb_eyetoy int DirectShow::Close() { - if (sourcefilter != nullptr) + if (sourcefilter) { this->Stop(); pControl->Stop(); - sourcefilter->Release(); - pSourceConfig->Release(); - samplegrabberfilter->Release(); - samplegrabber->Release(); - nullrenderer->Release(); - sourcefilter = nullptr; + safe_release(sourcefilter); + safe_release(pSourceConfig); + safe_release(samplegrabberfilter); + safe_release(samplegrabber); + safe_release(nullrenderer); } - pGraphBuilder->Release(); - pGraph->Release(); - pControl->Release(); + safe_release(pGraphBuilder); + safe_release(pGraph); + safe_release(pControl); - if (mpeg_buffer.start != nullptr) - { - free(mpeg_buffer.start); - mpeg_buffer.start = nullptr; - } + free(mpeg_buffer.start); + mpeg_buffer.start = nullptr; return 0; };