Monitor crashes of audio hal service via linkToDeath
Hwbinder 'linkToDeath' mechanism is used to track abrupt
disappearance of server hal objects due to hal server crash.
Upon hal server crash, notifications can be sent to binder
clients if needed, then the audioserver crashes itself as the
current audio HAL design does not provide an easy way to restore
all the transient objects (devices, streams, effects) in their
pre-crash state.
Bug: 34158778
Test: In binderized mode, kill audio hal server
Change-Id: If9265711edc445984601fcb5c29d2c173a370762
diff --git a/media/libaudiohal/EffectHalHidl.cpp b/media/libaudiohal/EffectHalHidl.cpp
index 3fb2f43..a11719a 100644
--- a/media/libaudiohal/EffectHalHidl.cpp
+++ b/media/libaudiohal/EffectHalHidl.cpp
@@ -160,7 +160,7 @@
mBuffersChanged = false;
return OK;
}
- return ret.isOk() ? analyzeResult(ret) : UNKNOWN_ERROR;
+ return ret.isOk() ? analyzeResult(ret) : FAILED_TRANSACTION;
}
status_t EffectHalHidl::command(uint32_t cmdCode, uint32_t cmdSize, void *pCmdData,
@@ -181,7 +181,7 @@
}
}
});
- return status;
+ return ret.isOk() ? status : FAILED_TRANSACTION;
}
status_t EffectHalHidl::getDescriptor(effect_descriptor_t *pDescriptor) {
@@ -194,13 +194,13 @@
effectDescriptorToHal(result, pDescriptor);
}
});
- return ret.isOk() ? analyzeResult(retval) : UNKNOWN_ERROR;
+ return ret.isOk() ? analyzeResult(retval) : FAILED_TRANSACTION;
}
status_t EffectHalHidl::close() {
if (mEffect == 0) return NO_INIT;
Return<Result> ret = mEffect->close();
- return ret.isOk() ? analyzeResult(ret) : UNKNOWN_ERROR;
+ return ret.isOk() ? analyzeResult(ret) : FAILED_TRANSACTION;
}
} // namespace android