From 436f68228a1fc648e779af0ed3b89ca9f252a1ba Mon Sep 17 00:00:00 2001 From: David Anderson Date: Wed, 1 Feb 2017 23:51:51 -0800 Subject: [PATCH] Don't let stale async compositables break main-thread paint transactions. (bug 1331548 part 1, r=mattwoodrow) --- gfx/layers/ipc/LayerTransactionParent.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/gfx/layers/ipc/LayerTransactionParent.cpp b/gfx/layers/ipc/LayerTransactionParent.cpp index fb8fab61d310..c863f09f09f9 100644 --- a/gfx/layers/ipc/LayerTransactionParent.cpp +++ b/gfx/layers/ipc/LayerTransactionParent.cpp @@ -420,8 +420,12 @@ LayerTransactionParent::RecvUpdate(const TransactionInfo& aInfo, } RefPtr host = imageBridge->FindCompositable(op.compositable()); if (!host) { - NS_ERROR("CompositableHost not found in the map"); - return IPC_FAIL_NO_REASON(this); + // This normally should not happen, but can after a GPU process crash. + // Media may not have had time to update the ImageContainer associated + // with a video frame, and we may try to attach a stale CompositableHandle. + // Rather than break the whole transaction, we just continue. + gfxCriticalNote << "CompositableHost " << op.compositable().Value() << " not found"; + continue; } if (!Attach(AsLayer(op.layer()), host, true)) { return IPC_FAIL_NO_REASON(this);