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:
parent
c170fed6f9
commit
42a09ff17a
@ -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;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user