diff options
Diffstat (limited to 'libs/gui/BitTube.cpp')
| -rw-r--r-- | libs/gui/BitTube.cpp | 16 | 
1 files changed, 16 insertions, 0 deletions
diff --git a/libs/gui/BitTube.cpp b/libs/gui/BitTube.cpp index ef7a6f54d9..351af652e2 100644 --- a/libs/gui/BitTube.cpp +++ b/libs/gui/BitTube.cpp @@ -86,6 +86,10 @@ void BitTube::setReceiveFd(base::unique_fd&& receiveFd) {      mReceiveFd = std::move(receiveFd);  } +void BitTube::setSendFd(base::unique_fd&& sendFd) { +    mSendFd = std::move(sendFd); +} +  ssize_t BitTube::write(void const* vaddr, size_t size) {      ssize_t err, len;      do { @@ -115,6 +119,11 @@ status_t BitTube::writeToParcel(Parcel* reply) const {      status_t result = reply->writeDupFileDescriptor(mReceiveFd);      mReceiveFd.reset(); +    if (result != NO_ERROR) { +        return result; +    } +    result = reply->writeDupFileDescriptor(mSendFd); +    mSendFd.reset();      return result;  } @@ -126,6 +135,13 @@ status_t BitTube::readFromParcel(const Parcel* parcel) {          ALOGE("BitTube::readFromParcel: can't dup file descriptor (%s)", strerror(error));          return -error;      } +    mSendFd.reset(dup(parcel->readFileDescriptor())); +    if (mSendFd < 0) { +        mSendFd.reset(); +        int error = errno; +        ALOGE("BitTube::readFromParcel: can't dup file descriptor (%s)", strerror(error)); +        return -error; +    }      return NO_ERROR;  }  |