diff options
author | Linux Build Service Account <lnxbuild@quicinc.com> | 2018-01-30 09:26:39 -0800 |
---|---|---|
committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2018-01-30 09:26:39 -0800 |
commit | 0847b23637a7b0610f15008c196fa7040e36da26 (patch) | |
tree | 52c3df05ccd7ecfae11d3378dd28a60d6eca042b /sdm/libs/hwc2/hwc_layers.cpp | |
parent | 02a31d6a6b4da85beef5cc05a05f7a799af9d8d4 (diff) | |
parent | 525e643511742465912d580ba359ab2dfd435f26 (diff) |
Merge "hwc2: Dup buffer fd in SetLayerBuffer() to avoid fb_id failure"
Diffstat (limited to 'sdm/libs/hwc2/hwc_layers.cpp')
-rw-r--r-- | sdm/libs/hwc2/hwc_layers.cpp | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/sdm/libs/hwc2/hwc_layers.cpp b/sdm/libs/hwc2/hwc_layers.cpp index b42eda74..d611352e 100644 --- a/sdm/libs/hwc2/hwc_layers.cpp +++ b/sdm/libs/hwc2/hwc_layers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2014-2017, The Linux Foundation. All rights reserved. + * Copyright (c) 2014-2018, The Linux Foundation. All rights reserved. * Not a Contribution. * * Copyright 2015 The Android Open Source Project @@ -180,12 +180,15 @@ HWCLayer::HWCLayer(hwc2_display_t display_id, HWCBufferAllocator *buf_allocator) HWCLayer::~HWCLayer() { // Close any fences left for this layer while (!release_fences_.empty()) { - close(release_fences_.front()); + ::close(release_fences_.front()); release_fences_.pop(); } if (layer_) { if (layer_->input_buffer.acquire_fence_fd >= 0) { - close(layer_->input_buffer.acquire_fence_fd); + ::close(layer_->input_buffer.acquire_fence_fd); + } + if (buffer_fd_ >= 0) { + ::close(buffer_fd_); } delete layer_; } @@ -257,10 +260,14 @@ HWC2::Error HWCLayer::SetLayerBuffer(buffer_handle_t buffer, int32_t acquire_fen layer_buffer->flags.secure_display = secure_display; if (layer_buffer->acquire_fence_fd >= 0) { - close(layer_buffer->acquire_fence_fd); + ::close(layer_buffer->acquire_fence_fd); } layer_buffer->acquire_fence_fd = acquire_fence; - layer_buffer->planes[0].fd = handle->fd; + if (buffer_fd_ >= 0) { + ::close(buffer_fd_); + } + buffer_fd_ = ::dup(handle->fd); + layer_buffer->planes[0].fd = buffer_fd_; layer_buffer->planes[0].offset = handle->offset; layer_buffer->planes[0].stride = UINT32(handle->width); layer_buffer->size = handle->size; |