summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--plugins/alsa/alsa.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/plugins/alsa/alsa.c b/plugins/alsa/alsa.c
index bcf03ad8..59de8d2b 100644
--- a/plugins/alsa/alsa.c
+++ b/plugins/alsa/alsa.c
@@ -506,8 +506,18 @@ palsa_thread (void *context) {
if (err < 0) {
if (err == -ESTRPIPE) {
fprintf (stderr, "alsa: trying to recover from suspend... (error=%d, %s)\n", err, snd_strerror (err));
- deadbeef->sendmessage (M_REINIT_SOUND, 0, 0, 0);
- break;
+ while ((err = snd_pcm_resume(audio)) == -EAGAIN) {
+ sleep(1); /* wait until the suspend flag is released */
+ }
+ if (err < 0) {
+ err = snd_pcm_prepare(audio);
+ if (err < 0) {
+ fprintf (stderr, "Can't recovery from suspend, prepare failed: %s", snd_strerror(err));
+ exit (-1);
+ }
+ }
+ // deadbeef->sendmessage (M_REINIT_SOUND, 0, 0, 0);
+ // break;
}
else {
if (err != -EPIPE) {