From 95b71de24dd3862b5a66b5b40f2ecd59f82b92e0 Mon Sep 17 00:00:00 2001 From: Steven Moreland Date: Thu, 13 Feb 2020 14:13:06 -0800 Subject: libbinder_ndk: no heap alloc when writing fd Was doing a heap allocation here out of convenience, but it's not necessary. Bug: N/A Test: atest CtsNdkBinderTestCases Change-Id: I29ed4eee13c51cbb187b8b767fd55c583f15dcf2 --- libs/binder/ndk/parcel.cpp | 13 ++++--------- 1 file changed, 4 insertions(+), 9 deletions(-) (limited to 'libs') diff --git a/libs/binder/ndk/parcel.cpp b/libs/binder/ndk/parcel.cpp index f18e118bc9..f0ea237ee8 100644 --- a/libs/binder/ndk/parcel.cpp +++ b/libs/binder/ndk/parcel.cpp @@ -242,23 +242,18 @@ binder_status_t AParcel_readStrongBinder(const AParcel* parcel, AIBinder** binde } binder_status_t AParcel_writeParcelFileDescriptor(AParcel* parcel, int fd) { - std::unique_ptr parcelFd; - if (fd < 0) { if (fd != -1) { return STATUS_UNKNOWN_ERROR; } - // parcelFd = nullptr - } else { // fd >= 0 - parcelFd = std::make_unique(unique_fd(fd)); + return parcel->get()->writeInt32(0); // null } - status_t status = parcel->get()->writeNullableParcelable(parcelFd); + ParcelFileDescriptor parcelFd = ParcelFileDescriptor(unique_fd(fd)); + status_t status = parcel->get()->writeParcelable(parcelFd); // ownership is retained by caller - if (parcelFd != nullptr) { - (void)parcelFd->release().release(); - } + (void)parcelFd.release().release(); return PruneStatusT(status); } -- cgit v1.2.3-59-g8ed1b