diff options
| -rw-r--r-- | libs/binder/ndk/include_cpp/android/binder_auto_utils.h | 3 | ||||
| -rw-r--r-- | libs/binder/ndk/status.cpp | 7 |
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) { |