aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcelo Fernandez2018-05-01 10:44:08 -0300
committerYour Name2018-05-01 22:05:20 +0200
commit01e64eb247e61cb1baf7d5e264fa73397af01e87 (patch)
tree683501861d08975a5c9bf49b940aedf9f34c4c69
parent4fe0a8efd84e459804021502270daf2f937cabfb (diff)
downloadgodot-01e64eb247e61cb1baf7d5e264fa73397af01e87.tar.gz
godot-01e64eb247e61cb1baf7d5e264fa73397af01e87.tar.zst
godot-01e64eb247e61cb1baf7d5e264fa73397af01e87.zip
Prevent PulseAudio driver to lock its mutex for too long
(cherry picked from commit cf4371a0ad7c6dd92a7913504637d48a320baccc)
-rw-r--r--drivers/pulseaudio/audio_driver_pulseaudio.cpp13
1 files changed, 11 insertions, 2 deletions
diff --git a/drivers/pulseaudio/audio_driver_pulseaudio.cpp b/drivers/pulseaudio/audio_driver_pulseaudio.cpp
index 733c7cc80..0f47949b4 100644
--- a/drivers/pulseaudio/audio_driver_pulseaudio.cpp
+++ b/drivers/pulseaudio/audio_driver_pulseaudio.cpp
@@ -340,13 +340,22 @@ void AudioDriverPulseAudio::thread_func(void *p_udata) {
bytes = byte_size;
}
- int ret = pa_stream_write(ad->pa_str, ptr, bytes, NULL, 0LL, PA_SEEK_RELATIVE);
+ ret = pa_stream_write(ad->pa_str, ptr, bytes, NULL, 0LL, PA_SEEK_RELATIVE);
if (ret >= 0) {
byte_size -= bytes;
ptr = (const char *)ptr + bytes;
}
} else {
- pa_mainloop_iterate(ad->pa_ml, 1, NULL);
+ ret = pa_mainloop_iterate(ad->pa_ml, 0, NULL);
+ if (ret == 0) {
+ // If pa_mainloop_iterate returns 0 sleep for 1 msec to wait
+ // for the stream to be able to process more bytes
+ ad->unlock();
+
+ OS::get_singleton()->delay_usec(1000);
+
+ ad->lock();
+ }
}
}
}