r_submix: Fix logspam on pipe corruption
Prevent logging an error message on every attempt to write
if the FIFO backing up the MonoPipe got corrupted. This condition
can be detected by checking for -EIO error code.
Bug: 74067530
Test: make audio_utils_fifo_base::mIsShutdown to be set by default,
run r_submix_tests and observe logcat
Change-Id: I5d67997e902e834f04c10f9ffb39b16cba9c5739
diff --git a/modules/audio_remote_submix/audio_hw.cpp b/modules/audio_remote_submix/audio_hw.cpp
index d78e723..e826ac3 100644
--- a/modules/audio_remote_submix/audio_hw.cpp
+++ b/modules/audio_remote_submix/audio_hw.cpp
@@ -821,6 +821,11 @@
written_frames = 0;
return 0;
+ } else if (written_frames == -EIO) {
+ // receiving -EIO means that the underlying FIFO has shut itself down
+ // due to reader/writer indices corruption. This state is irreversible,
+ // so shut down the monopipe. It will be destroyed on the next call to 'write.'
+ sink->shutdown(true);
} else {
// write() returned UNDERRUN or WOULD_BLOCK, retry
ALOGE("out_write() write to pipe returned unexpected %zd", written_frames);