Fix AudioFlinger TimeCheck
The conversion of IAudioFlinger to AIDL resulted in a regression in
its watchdog behavior. This change fixes that by allowing the
implementation to fully wrap the onTransact() call rather than just
prepend to it using onPreTransact().
Fixes: 187383878
Test: Added a long wait in createTrack, as described in the bug and
watched to logs to confirm that the watchdog kills the process.
Change-Id: I3cceb2b37d27dbea2060ced3659e11bde363f86d
diff --git a/services/audioflinger/AudioFlinger.cpp b/services/audioflinger/AudioFlinger.cpp
index 20812bf..3562b00 100644
--- a/services/audioflinger/AudioFlinger.cpp
+++ b/services/audioflinger/AudioFlinger.cpp
@@ -4115,9 +4115,13 @@
// ----------------------------------------------------------------------------
-status_t AudioFlinger::onPreTransact(
- TransactionCode code, const Parcel& /* data */, uint32_t /* flags */)
-{
+status_t AudioFlinger::onTransactWrapper(TransactionCode code,
+ const Parcel& data,
+ uint32_t flags,
+ const std::function<status_t()>& delegate) {
+ (void) data;
+ (void) flags;
+
// make sure transactions reserved to AudioPolicyManager do not come from other processes
switch (code) {
case TransactionCode::SET_STREAM_VOLUME:
@@ -4150,6 +4154,7 @@
default:
return INVALID_OPERATION;
}
+ // Fail silently in these cases.
return OK;
default:
break;
@@ -4177,6 +4182,7 @@
default:
return INVALID_OPERATION;
}
+ // Fail silently in these cases.
return OK;
}
} break;
@@ -4218,7 +4224,7 @@
AudioSystem::get_audio_policy_service();
}
- return OK;
+ return delegate();
}
} // namespace android