From 123dd5fe2de35f881a17779e3aca4cd48195610f Mon Sep 17 00:00:00 2001
From: Max Kellermann <max@duempel.org>
Date: Wed, 7 Aug 2013 18:55:00 +0200
Subject: mixer/alsa: use AllocatedArray for the pollfd buffer

---
 src/mixer/AlsaMixerPlugin.cxx | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mixer/AlsaMixerPlugin.cxx b/src/mixer/AlsaMixerPlugin.cxx
index 8f7cd608e..5ab19a8d6 100644
--- a/src/mixer/AlsaMixerPlugin.cxx
+++ b/src/mixer/AlsaMixerPlugin.cxx
@@ -23,6 +23,7 @@
 #include "GlobalEvents.hxx"
 #include "Main.hxx"
 #include "event/MultiSocketMonitor.hxx"
+#include "util/ReusableArray.hxx"
 
 #include <algorithm>
 
@@ -36,6 +37,8 @@ static constexpr unsigned VOLUME_MIXER_ALSA_INDEX_DEFAULT = 0;
 class AlsaMixerMonitor final : private MultiSocketMonitor {
 	snd_mixer_t *const mixer;
 
+	ReusableArray<pollfd> pfd_buffer;
+
 public:
 	AlsaMixerMonitor(EventLoop &_loop, snd_mixer_t *_mixer)
 		:MultiSocketMonitor(_loop), mixer(_mixer) {}
@@ -87,7 +90,8 @@ AlsaMixerMonitor::PrepareSockets(gcc_unused gint *timeout_r)
 	if (count < 0)
 		count = 0;
 
-	struct pollfd *pfds = g_new(struct pollfd, count);
+	struct pollfd *pfds = pfd_buffer.Get(count);
+
 	count = snd_mixer_poll_descriptors(mixer, pfds, count);
 	if (count < 0)
 		count = 0;
@@ -109,8 +113,6 @@ AlsaMixerMonitor::PrepareSockets(gcc_unused gint *timeout_r)
 	for (auto i = pfds; i != end; ++i)
 		if (i->events != 0)
 			AddSocket(i->fd, i->events);
-
-	g_free(pfds);
 }
 
 void
-- 
cgit v1.2.3