Merge "sdm: properly close all the fence Fds" into dev-1.0
diff --git a/sdm/libs/hwc/hwc_color_manager.cpp b/sdm/libs/hwc/hwc_color_manager.cpp
index fcd2a55..5abe94a 100644
--- a/sdm/libs/hwc/hwc_color_manager.cpp
+++ b/sdm/libs/hwc/hwc_color_manager.cpp
@@ -217,13 +217,27 @@
   if (solid_fill_enable_ && solid_fill_layers_ && layer_list) {
     hwc_display->Commit(solid_fill_layers_);
 
-    // release SF layers corresponding Fences manually before returning to Framework.
+    // SurfaceFlinger layer stack is dropped in solid fill case and replaced with local layer stack
+    // Close acquire fence fds associated with SF layer stack
+    // Close release/retire fence fds returned along with local layer stack
     for (size_t i = 0; i < (layer_list->numHwLayers - 1); i++) {
-      if (layer_list->hwLayers[i].acquireFenceFd >= 0) {
-        close(layer_list->hwLayers[i].acquireFenceFd);
-        layer_list->hwLayers[i].acquireFenceFd = -1;
+      int &fence_fd = layer_list->hwLayers[i].acquireFenceFd;
+      if (fence_fd >= 0) {
+        close(fence_fd);
+        fence_fd = -1;
       }
-      layer_list->retireFenceFd = -1;
+    }
+
+    for (size_t i = 0; i < (solid_fill_layers_->numHwLayers - 1); i++) {
+      int &fence_fd = solid_fill_layers_->hwLayers[i].releaseFenceFd;
+      if (fence_fd >= 0) {
+        close(fence_fd);
+        fence_fd = -1;
+      }
+    }
+    if (solid_fill_layers_->retireFenceFd >= 0) {
+      close(solid_fill_layers_->retireFenceFd);
+      solid_fill_layers_->retireFenceFd = -1;
     }
 
     return true;