summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
author Steven Moreland <smoreland@google.com> 2020-09-25 19:17:56 +0000
committer Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com> 2020-09-25 19:17:56 +0000
commit1a27d7f55760a571566c931eae72a4610b91aa15 (patch)
tree1a60d59271dd46cf5a23b2b5a1598dd0f67ef7e5
parentacca8f720e067287cf7be8452af325c9fcc54bca (diff)
parent623a229a0cfe856aef0cb5a451aa3bb75a43cae5 (diff)
Merge "libbinder_ndk: avoid need to allocate heap status" am: 9b1e10db73 am: 2133bd5454 am: 7a07f2fe76 am: 623a229a0c
Original change: https://android-review.googlesource.com/c/platform/frameworks/native/+/1434715 Change-Id: I223106e580d508b9009e30b0232b51a9ea522206
-rw-r--r--libs/binder/ndk/include_cpp/android/binder_auto_utils.h3
-rw-r--r--libs/binder/ndk/status.cpp7
2 files changed, 8 insertions, 2 deletions
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 f59bb75cc1..439b019665 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 @@ class ScopedAStatus : public impl::ScopedAResource<AStatus*, void, AStatus_delet
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 4fd59a21da..a8ae4411c6 100644
--- a/libs/binder/ndk/status.cpp
+++ b/libs/binder/ndk/status.cpp
@@ -23,7 +23,8 @@ using ::android::status_t;
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_deleteDescription(const char* description) {
}
void AStatus_delete(AStatus* status) {
- delete status;
+ if (status != AStatus_newOk()) {
+ delete status;
+ }
}
binder_status_t PruneStatusT(status_t status) {