commit | 623a229a0cfe856aef0cb5a451aa3bb75a43cae5 | [log] [tgz] |
---|---|---|
author | Steven Moreland <smoreland@google.com> | Fri Sep 25 18:51:37 2020 +0000 |
committer | Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> | Fri Sep 25 18:51:37 2020 +0000 |
tree | a2a41c26da5dccc68f31686aa0171ec1b584a45a | |
parent | 5cba6aa335ac78d5948eed3f45bd4fd6dfc6b8aa [diff] | |
parent | 7a07f2fe767212e69a94c50944ebb8a583db903d [diff] |
Merge "libbinder_ndk: avoid need to allocate heap status" am: 9b1e10db73 am: 2133bd5454 am: 7a07f2fe76 Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1434715 Change-Id: Ife73d28284c7d5a266e63b75aa38e4a1effbacd0
diff --git a/libs/binder/ndk/include_cpp/android/binder_auto_utils.h b/libs/binder/ndk/include_cpp/android/binder_auto_utils.h index f59bb75..439b019 100644 --- a/libs/binder/ndk/include_cpp/android/binder_auto_utils.h +++ b/libs/binder/ndk/include_cpp/android/binder_auto_utils.h
@@ -199,6 +199,9 @@ public: /** * Takes ownership of a. + * + * WARNING: this constructor is only expected to be used when reading a + * status value. Use `ScopedAStatus::ok()` instead. */ explicit ScopedAStatus(AStatus* a = nullptr) : ScopedAResource(a) {} ~ScopedAStatus() {}
diff --git a/libs/binder/ndk/status.cpp b/libs/binder/ndk/status.cpp index 4fd59a2..a8ae441 100644 --- a/libs/binder/ndk/status.cpp +++ b/libs/binder/ndk/status.cpp
@@ -23,7 +23,8 @@ using ::android::binder::Status; AStatus* AStatus_newOk() { - return new AStatus(); + static AStatus status = AStatus(); + return &status; } AStatus* AStatus_fromExceptionCode(binder_exception_t exception) { @@ -78,7 +79,9 @@ } void AStatus_delete(AStatus* status) { - delete status; + if (status != AStatus_newOk()) { + delete status; + } } binder_status_t PruneStatusT(status_t status) {