diff options
| author | 2020-02-14 17:45:13 +0000 | |
|---|---|---|
| committer | 2020-02-14 17:45:13 +0000 | |
| commit | 51c6a7c8a423ca48d4287c715cd2beffa1c061ad (patch) | |
| tree | 255ff2eb6ee45963ebfb450ab12c1e9bdb4dcbc8 /libs | |
| parent | 27b827f6e3cd933e99c535d2d5803a72140b473e (diff) | |
| parent | 95b71de24dd3862b5a66b5b40f2ecd59f82b92e0 (diff) | |
Merge "libbinder_ndk: no heap alloc when writing fd"
Diffstat (limited to 'libs')
| -rw-r--r-- | libs/binder/ndk/parcel.cpp | 13 |
1 files changed, 4 insertions, 9 deletions
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<ParcelFileDescriptor> parcelFd; - if (fd < 0) { if (fd != -1) { return STATUS_UNKNOWN_ERROR; } - // parcelFd = nullptr - } else { // fd >= 0 - parcelFd = std::make_unique<ParcelFileDescriptor>(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); } |