merge in nyc-release history after reset to nyc-dev
diff --git a/drmdisplaycompositor.cpp b/drmdisplaycompositor.cpp
index 0b2506f..92323b6 100644
--- a/drmdisplaycompositor.cpp
+++ b/drmdisplaycompositor.cpp
@@ -864,6 +864,23 @@
   return std::make_tuple(ret, id);
 }
 
+void DrmDisplayCompositor::ClearDisplay() {
+  AutoLock lock(&lock_, "compositor");
+  int ret = lock.Lock();
+  if (ret)
+    return;
+
+  if (!active_composition_)
+    return;
+
+  if (DisablePlanes(active_composition_.get()))
+    return;
+
+  active_composition_->SignalCompositionDone();
+
+  active_composition_.reset(NULL);
+}
+
 void DrmDisplayCompositor::ApplyFrame(
     std::unique_ptr<DrmDisplayComposition> composition, int status) {
   int ret = status;
@@ -873,11 +890,10 @@
 
   if (ret) {
     ALOGE("Composite failed for display %d", display_);
-
     // Disable the hw used by the last active composition. This allows us to
     // signal the release fences from that composition to avoid hanging.
-    if (DisablePlanes(active_composition_.get()))
-      return;
+    ClearDisplay();
+    return;
   }
   ++dump_frames_composited_;
 
@@ -958,6 +974,10 @@
           composition = std::move(squashed);
         } else {
           ALOGE("Failed to squash frame for display %d", display_);
+          // Disable the hw used by the last active composition. This allows us
+          // to signal the release fences from that composition to avoid
+          // hanging.
+          ClearDisplay();
           return ret;
         }
       }
@@ -1041,7 +1061,7 @@
   // Make sure there is more than one layer to squash.
   size_t src_planes_with_layer = std::count_if(
       src_planes.begin(), src_planes.end(), [](DrmCompositionPlane &p) {
-        return p.type() == DrmCompositionPlane::Type::kLayer;
+        return p.type() != DrmCompositionPlane::Type::kDisable;
       });
   if (src_planes_with_layer <= 1)
     return -EALREADY;
diff --git a/drmdisplaycompositor.h b/drmdisplaycompositor.h
index e4c3b53..9487cac 100644
--- a/drmdisplaycompositor.h
+++ b/drmdisplaycompositor.h
@@ -149,6 +149,7 @@
   int ApplyDpms(DrmDisplayComposition *display_comp);
   int DisablePlanes(DrmDisplayComposition *display_comp);
 
+  void ClearDisplay();
   void ApplyFrame(std::unique_ptr<DrmDisplayComposition> composition,
                   int status);