From 29e1b6e4653b4ab65b9fe5326b1df8fe7cb6a1d2 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Thu, 9 Feb 2017 20:57:14 +0100 Subject: [PATCH] mixer/alsa: reset the MultiSocketMonitor in the destructor Fixes potential crash bug. --- NEWS | 2 ++ src/mixer/plugins/AlsaMixerPlugin.cxx | 7 +++++++ 2 files changed, 9 insertions(+) diff --git a/NEWS b/NEWS index 7ba59b10a..1fcae0d6d 100644 --- a/NEWS +++ b/NEWS @@ -3,6 +3,8 @@ ver 0.20.5 (not yet released) - id3: fix memory leak on corrupt ID3 tags * decoder - sidplay: don't require libsidutils when building with libsidplayfp +* mixer + - alsa: fix crash bug ver 0.20.4 (2017/02/01) * input diff --git a/src/mixer/plugins/AlsaMixerPlugin.cxx b/src/mixer/plugins/AlsaMixerPlugin.cxx index 4f0e329a8..852326926 100644 --- a/src/mixer/plugins/AlsaMixerPlugin.cxx +++ b/src/mixer/plugins/AlsaMixerPlugin.cxx @@ -23,6 +23,7 @@ #include "output/OutputAPI.hxx" #include "event/MultiSocketMonitor.hxx" #include "event/DeferredMonitor.hxx" +#include "event/Call.hxx" #include "util/ASCII.hxx" #include "util/ReusableArray.hxx" #include "util/Domain.hxx" @@ -53,6 +54,12 @@ public: DeferredMonitor::Schedule(); } + ~AlsaMixerMonitor() { + BlockingCall(MultiSocketMonitor::GetEventLoop(), [this](){ + MultiSocketMonitor::Reset(); + }); + } + private: virtual void RunDeferred() override { InvalidateSockets();