hal: update error handling for pcm_prepare failures
Return any errors from pcm_prepare in start input
or output streams and ensure the pcm device is closed.
Change-Id: I7d8d5ab967e514fc9df6dc8d7ae3374ad963f3df
diff --git a/hal/audio_hw.c b/hal/audio_hw.c
index d44eeb4..e63d039 100644
--- a/hal/audio_hw.c
+++ b/hal/audio_hw.c
@@ -837,8 +837,14 @@
break;
}
- ALOGV("%s: pcm_prepare start", __func__);
- pcm_prepare(in->pcm);
+ ALOGV("%s: pcm_prepare", __func__);
+ ret = pcm_prepare(in->pcm);
+ if (ret < 0) {
+ ALOGE("%s: pcm_prepare returned %d", __func__, ret);
+ pcm_close(in->pcm);
+ in->pcm = NULL;
+ goto error_open;
+ }
audio_extn_perf_lock_release();
@@ -1196,10 +1202,16 @@
}
break;
}
- ALOGV("%s: pcm_prepare start", __func__);
- if (pcm_is_ready(out->pcm))
- pcm_prepare(out->pcm);
-
+ ALOGV("%s: pcm_prepare", __func__);
+ if (pcm_is_ready(out->pcm)) {
+ ret = pcm_prepare(out->pcm);
+ if (ret < 0) {
+ ALOGE("%s: pcm_prepare returned %d", __func__, ret);
+ pcm_close(out->pcm);
+ out->pcm = NULL;
+ goto error_open;
+ }
+ }
} else {
out->pcm = NULL;
out->compr = compress_open(adev->snd_card, out->pcm_device_id,