Merge "error: no matching constructor for initialization of 'std::ifstream'" into aosp-main-future
diff --git a/audio/aidl/default/Android.bp b/audio/aidl/default/Android.bp
index d47b0b1..73d7626 100644
--- a/audio/aidl/default/Android.bp
+++ b/audio/aidl/default/Android.bp
@@ -62,7 +62,6 @@
"ModulePrimary.cpp",
"SoundDose.cpp",
"Stream.cpp",
- "StreamSwitcher.cpp",
"Telephony.cpp",
"XsdcConversion.cpp",
"alsa/Mixer.cpp",
@@ -72,6 +71,7 @@
"bluetooth/DevicePortProxy.cpp",
"bluetooth/ModuleBluetooth.cpp",
"bluetooth/StreamBluetooth.cpp",
+ "deprecated/StreamSwitcher.cpp",
"primary/PrimaryMixer.cpp",
"primary/StreamPrimary.cpp",
"r_submix/ModuleRemoteSubmix.cpp",
diff --git a/audio/aidl/default/StreamSwitcher.cpp b/audio/aidl/default/deprecated/StreamSwitcher.cpp
similarity index 98%
rename from audio/aidl/default/StreamSwitcher.cpp
rename to audio/aidl/default/deprecated/StreamSwitcher.cpp
index 0052889..f1e0f52 100644
--- a/audio/aidl/default/StreamSwitcher.cpp
+++ b/audio/aidl/default/deprecated/StreamSwitcher.cpp
@@ -23,12 +23,12 @@
#include <error/expected_utils.h>
#include "core-impl/StreamStub.h"
-#include "core-impl/StreamSwitcher.h"
+#include "deprecated/StreamSwitcher.h"
using aidl::android::hardware::audio::effect::IEffect;
using aidl::android::media::audio::common::AudioDevice;
-namespace aidl::android::hardware::audio::core {
+namespace aidl::android::hardware::audio::core::deprecated {
StreamSwitcher::StreamSwitcher(StreamContext* context, const Metadata& metadata)
: mContext(context),
@@ -268,4 +268,4 @@
return mStream->setGain(gain);
}
-} // namespace aidl::android::hardware::audio::core
+} // namespace aidl::android::hardware::audio::core::deprecated
diff --git a/audio/aidl/default/include/core-impl/StreamSwitcher.h b/audio/aidl/default/deprecated/StreamSwitcher.h
similarity index 96%
rename from audio/aidl/default/include/core-impl/StreamSwitcher.h
rename to audio/aidl/default/deprecated/StreamSwitcher.h
index 2d75e85..56fdd23 100644
--- a/audio/aidl/default/include/core-impl/StreamSwitcher.h
+++ b/audio/aidl/default/deprecated/StreamSwitcher.h
@@ -14,11 +14,18 @@
* limitations under the License.
*/
+/**
+ ** This class is deprecated because its use causes threading issues
+ ** with the FMQ due to change of threads reading and writing into FMQ.
+ **
+ ** DO NOT USE. These files will be removed.
+ **/
+
#pragma once
-#include "Stream.h"
+#include "core-impl/Stream.h"
-namespace aidl::android::hardware::audio::core {
+namespace aidl::android::hardware::audio::core::deprecated {
// 'StreamSwitcher' is an implementation of 'StreamCommonInterface' which allows
// dynamically switching the underlying stream implementation based on currently
@@ -192,4 +199,4 @@
bool mBluetoothParametersUpdated = false;
};
-} // namespace aidl::android::hardware::audio::core
+} // namespace aidl::android::hardware::audio::core::deprecated
diff --git a/boot/aidl/client/BootControlClient.cpp b/boot/aidl/client/BootControlClient.cpp
index 89258d2..d625ee9 100644
--- a/boot/aidl/client/BootControlClient.cpp
+++ b/boot/aidl/client/BootControlClient.cpp
@@ -18,6 +18,7 @@
#include <aidl/android/hardware/boot/IBootControl.h>
#include <android-base/logging.h>
+#include <android/binder_ibinder.h>
#include <android/binder_manager.h>
#include <android/hardware/boot/1.0/IBootControl.h>
#include <android/hardware/boot/1.1/IBootControl.h>
@@ -65,11 +66,27 @@
using IBootControl = ::aidl::android::hardware::boot::IBootControl;
public:
- BootControlClientAidl(std::shared_ptr<IBootControl> module) : module_(module) {}
+ explicit BootControlClientAidl(std::shared_ptr<IBootControl> module)
+ : module_(module),
+ boot_control_death_recipient(AIBinder_DeathRecipient_new(onBootControlServiceDied)) {
+ binder_status_t status = AIBinder_linkToDeath(module->asBinder().get(),
+ boot_control_death_recipient, nullptr);
+ if (status != STATUS_OK) {
+ LOG(ERROR) << "Could not link to binder death";
+ return;
+ }
+ }
BootControlVersion GetVersion() const override { return BootControlVersion::BOOTCTL_AIDL; }
- ~BootControlClientAidl() = default;
+ ~BootControlClientAidl() {
+ if (boot_control_death_recipient) {
+ AIBinder_unlinkToDeath(module_->asBinder().get(), boot_control_death_recipient, this);
+ }
+ }
+
+ void onBootControlServiceDied() { LOG(ERROR) << "boot control service AIDL died"; }
+
virtual int32_t GetNumSlots() const {
int32_t ret = -1;
LOG_NDK_STATUS(module_->getNumberSlots(&ret));
@@ -90,8 +107,8 @@
std::string ret;
const auto status = module_->getSuffix(slot, &ret);
if (!status.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << status.getDescription();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed "
+ << status.getDescription();
return {};
}
return ret;
@@ -101,8 +118,8 @@
bool ret = false;
const auto status = module_->isSlotBootable(slot, &ret);
if (!status.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << status.getDescription();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed "
+ << status.getDescription();
return {};
}
return ret;
@@ -111,8 +128,8 @@
CommandResult MarkSlotUnbootable(int32_t slot) {
const auto status = module_->setSlotAsUnbootable(slot);
if (!status.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << status.getDescription();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed "
+ << status.getDescription();
}
return {.success = status.isOk(), .errMsg = status.getDescription()};
}
@@ -120,8 +137,8 @@
CommandResult SetActiveBootSlot(int slot) {
const auto status = module_->setActiveBootSlot(slot);
if (!status.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << status.getDescription();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed "
+ << status.getDescription();
}
return {.success = status.isOk(), .errMsg = status.getDescription()};
}
@@ -136,8 +153,8 @@
bool ret = false;
const auto status = module_->isSlotMarkedSuccessful(slot, &ret);
if (!status.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << status.getDescription();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed "
+ << status.getDescription();
return {};
}
return ret;
@@ -154,14 +171,19 @@
CommandResult SetSnapshotMergeStatus(aidl::android::hardware::boot::MergeStatus merge_status) {
const auto status = module_->setSnapshotMergeStatus(merge_status);
if (!status.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << merge_status << ")"
- << " failed " << status.getDescription();
+ LOG(ERROR) << __FUNCTION__ << "(" << merge_status << ")" << " failed "
+ << status.getDescription();
}
return {.success = status.isOk(), .errMsg = status.getDescription()};
}
private:
const std::shared_ptr<IBootControl> module_;
+ AIBinder_DeathRecipient* boot_control_death_recipient;
+ static void onBootControlServiceDied(void* client) {
+ BootControlClientAidl* self = static_cast<BootControlClientAidl*>(client);
+ self->onBootControlServiceDied();
+ }
};
using namespace android::hardware::boot;
@@ -205,8 +227,7 @@
slot,
[&](const ::android::hardware::hidl_string& slotSuffix) { suffix = slotSuffix; });
if (!ret.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << ret.description();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed " << ret.description();
}
return suffix;
}
@@ -214,8 +235,7 @@
std::optional<bool> IsSlotBootable(int32_t slot) const {
const auto ret = module_v1_->isSlotBootable(slot);
if (!ret.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << ret.description();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed " << ret.description();
return {};
}
const auto bool_result = ret.withDefault(V1_0::BoolResult::INVALID_SLOT);
@@ -233,8 +253,7 @@
result.errMsg = error.errMsg;
});
if (!ret.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << ret.description();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed " << ret.description();
}
return result;
}
@@ -246,8 +265,7 @@
result.errMsg = error.errMsg;
});
if (!ret.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << ret.description();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed " << ret.description();
}
return result;
}
@@ -267,8 +285,7 @@
std::optional<bool> IsSlotMarkedSuccessful(int32_t slot) const {
const auto ret = module_v1_->isSlotMarkedSuccessful(slot);
if (!ret.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << slot << ")"
- << " failed " << ret.description();
+ LOG(ERROR) << __FUNCTION__ << "(" << slot << ")" << " failed " << ret.description();
return {};
}
const auto bool_result = ret.withDefault(V1_0::BoolResult::INVALID_SLOT);
@@ -299,8 +316,8 @@
const auto ret =
module_v1_1_->setSnapshotMergeStatus(static_cast<V1_1::MergeStatus>(merge_status));
if (!ret.isOk()) {
- LOG(ERROR) << __FUNCTION__ << "(" << merge_status << ")"
- << " failed " << ret.description();
+ LOG(ERROR) << __FUNCTION__ << "(" << merge_status << ")" << " failed "
+ << ret.description();
}
return {.success = ret.isOk(), .errMsg = ret.description()};
}
@@ -326,7 +343,6 @@
std::unique_ptr<BootControlClient> BootControlClient::WaitForService() {
const auto instance_name =
std::string(::aidl::android::hardware::boot::IBootControl::descriptor) + "/default";
-
if (AServiceManager_isDeclared(instance_name.c_str())) {
auto module = ::aidl::android::hardware::boot::IBootControl::fromBinder(
ndk::SpAIBinder(AServiceManager_waitForService(instance_name.c_str())));