summaryrefslogtreecommitdiff
path: root/sdm/libs/hwc2/hwc_layers.cpp
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@quicinc.com>2018-01-30 09:26:39 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2018-01-30 09:26:39 -0800
commit0847b23637a7b0610f15008c196fa7040e36da26 (patch)
tree52c3df05ccd7ecfae11d3378dd28a60d6eca042b /sdm/libs/hwc2/hwc_layers.cpp
parent02a31d6a6b4da85beef5cc05a05f7a799af9d8d4 (diff)
parent525e643511742465912d580ba359ab2dfd435f26 (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.cpp17
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;