output/alsa: use a new I/O thread with real-time scheduling
The normal I/O event thread can have a large latency, e.g. when libgnutls loads all TLS CA certificates for a https connect. This makes it unreliable for the ALSA I/O notifications, and causes ring buffer xruns. To avoid interfering with high latency events such as CURL's, we move the ALSA I/O events to a separate I/O thread which also obtains real-time scheduling (if possible). Closes #221
This commit is contained in:
@@ -32,9 +32,12 @@ class EventThread final {
|
||||
|
||||
Thread thread;
|
||||
|
||||
const bool realtime;
|
||||
|
||||
public:
|
||||
EventThread()
|
||||
:event_loop(ThreadId::Null()), thread(BIND_THIS_METHOD(Run)) {}
|
||||
explicit EventThread(bool _realtime=false)
|
||||
:event_loop(ThreadId::Null()), thread(BIND_THIS_METHOD(Run)),
|
||||
realtime(_realtime) {}
|
||||
|
||||
~EventThread() noexcept {
|
||||
Stop();
|
||||
|
||||
Reference in New Issue
Block a user