Browse Source

On stop write any chunk(s) left in the period buffer

That should prevent a possible sudden stop
sniperrifle2004 4 years ago
parent
commit
a68dfa0287
1 changed files with 8 additions and 1 deletions
  1. 8 1
      playback/src/audio_backend/alsa.rs

+ 8 - 1
playback/src/audio_backend/alsa.rs

@@ -107,7 +107,14 @@ impl Sink for AlsaSink {
 
     fn stop(&mut self) -> io::Result<()> {
         {
-            let pcm = self.pcm.as_ref().unwrap();
+            let pcm = self.pcm.as_mut().unwrap();
+            // Write any leftover data in the period buffer
+            // before draining the actual buffer
+            let io = pcm.io_i16().unwrap();
+            match io.writei(&self.buffer[..self.buffered_data]) {
+                Ok(_) => (),
+                Err(err) => pcm.try_recover(err, false).unwrap(),
+            }
             pcm.drain().unwrap();
         }
         self.pcm = None;