sde: Close acquire fence fds, if display commit fails.
Close acquire fence fd of all layers, if display commit fails. This
is required to avoid fd leaks.
Change-Id: I12d44ddc0d1e378374c64a1808e7a19f071209be
diff --git a/displayengine/libs/hwc/hwc_display.cpp b/displayengine/libs/hwc/hwc_display.cpp
index 7827af2..771c07f 100644
--- a/displayengine/libs/hwc/hwc_display.cpp
+++ b/displayengine/libs/hwc/hwc_display.cpp
@@ -369,6 +369,8 @@
return -EINVAL;
}
+ int status = 0;
+
size_t num_hw_layers = content_list->numHwLayers;
if (num_hw_layers <= 1) {
if (!num_hw_layers) {
@@ -401,7 +403,7 @@
DisplayError error = display_intf_->Commit(&layer_stack_);
if (UNLIKELY(error != kErrorNone)) {
DLOGE("Commit failed. Error = %d", error);
- return -EINVAL;
+ status = -EINVAL;
}
for (size_t i = 0; i < num_hw_layers; i++) {
@@ -409,7 +411,8 @@
Layer &layer = layer_stack_.layers[i];
LayerBuffer *layer_buffer = layer_stack_.layers[i].input_buffer;
- if (layer.composition == kCompositionSDE || layer.composition == kCompositionGPUTarget) {
+ if ((status == 0) && (layer.composition == kCompositionSDE ||
+ layer.composition == kCompositionGPUTarget)) {
hwc_layer.releaseFenceFd = layer_buffer->release_fence_fd;
}
@@ -418,7 +421,7 @@
}
}
- return 0;
+ return status;
}
bool HWCDisplay::NeedsFrameBufferRefresh(hwc_display_contents_1_t *content_list) {