mixer/alsa: fix deadlock

This deadlock was a regression by commit 8e38b4f8.  Since we currently
can't resolve this, let's revert the commit, and add a GLib specific
workaround for the build failure.
This commit is contained in:
Max Kellermann 2013-12-15 19:07:25 +01:00
parent c170fed6f9
commit 42a09ff17a

View File

@ -47,10 +47,22 @@ class AlsaMixerMonitor final : private MultiSocketMonitor {
public: public:
AlsaMixerMonitor(EventLoop &_loop, snd_mixer_t *_mixer) AlsaMixerMonitor(EventLoop &_loop, snd_mixer_t *_mixer)
:MultiSocketMonitor(_loop), mixer(_mixer) { :MultiSocketMonitor(_loop), mixer(_mixer) {
BlockingCall(_loop, [this](){ InvalidateSockets(); }); #ifdef USE_EPOLL
_loop.AddCall([this](){ InvalidateSockets(); });
#else
_loop.AddIdle(InitAlsaMixerMonitor, this);
#endif
} }
private: private:
#ifndef USE_EPOLL
static gboolean InitAlsaMixerMonitor(gpointer data) {
AlsaMixerMonitor &amm = *(AlsaMixerMonitor *)data;
amm.InvalidateSockets();
return false;
}
#endif
virtual int PrepareSockets() override; virtual int PrepareSockets() override;
virtual void DispatchSockets() override; virtual void DispatchSockets() override;
}; };