aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/event/MultiSocketMonitor.cxx9
-rw-r--r--src/event/MultiSocketMonitor.hxx5
-rw-r--r--src/mixer/AlsaMixerPlugin.cxx4
3 files changed, 17 insertions, 1 deletions
diff --git a/src/event/MultiSocketMonitor.cxx b/src/event/MultiSocketMonitor.cxx
index f22b0a022..5ef8b98af 100644
--- a/src/event/MultiSocketMonitor.cxx
+++ b/src/event/MultiSocketMonitor.cxx
@@ -19,6 +19,7 @@
#include "config.h"
#include "MultiSocketMonitor.hxx"
+#include "Loop.hxx"
#include <algorithm>
@@ -35,6 +36,14 @@ MultiSocketMonitor::~MultiSocketMonitor()
// TODO
}
+void
+MultiSocketMonitor::ClearSocketList()
+{
+ assert(GetEventLoop().IsInsideOrNull());
+
+ fds.clear();
+}
+
#ifndef WIN32
void
diff --git a/src/event/MultiSocketMonitor.hxx b/src/event/MultiSocketMonitor.hxx
index 963745be1..150f7baad 100644
--- a/src/event/MultiSocketMonitor.hxx
+++ b/src/event/MultiSocketMonitor.hxx
@@ -126,6 +126,11 @@ public:
}
/**
+ * Remove all sockets.
+ */
+ void ClearSocketList();
+
+ /**
* Update the known sockets by invoking the given function for
* each one; its return value is the events bit mask. A
* return value of 0 means the socket will be removed from the
diff --git a/src/mixer/AlsaMixerPlugin.cxx b/src/mixer/AlsaMixerPlugin.cxx
index f0d9b8007..4f92e697d 100644
--- a/src/mixer/AlsaMixerPlugin.cxx
+++ b/src/mixer/AlsaMixerPlugin.cxx
@@ -91,8 +91,10 @@ static constexpr Domain alsa_mixer_domain("alsa_mixer");
int
AlsaMixerMonitor::PrepareSockets()
{
- if (mixer == nullptr)
+ if (mixer == nullptr) {
+ ClearSocketList();
return -1;
+ }
int count = snd_mixer_poll_descriptors_count(mixer);
if (count < 0)