瀏覽代碼

Merge pull request #18544 from marcelofg55/pa_lock

Prevent PulseAudio driver to lock its mutex for too long
Rémi Verschelde 7 年之前
父節點
當前提交
422e636c9a
共有 1 個文件被更改,包括 11 次插入2 次删除
  1. 11 2
      drivers/pulseaudio/audio_driver_pulseaudio.cpp

+ 11 - 2
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();
+					}
 				}
 			}
 		}