Bug 1439682 - Guard against large chunk allocation failure. r?nical draft
authorKartikaya Gupta <kgupta@mozilla.com>
Tue, 20 Feb 2018 15:36:50 -0500
changeset 757559 6b2284a75a51ebebcaf4162024a3a33584753bd4
parent 757555 b03d9c87bbf6b9b73883758ce494dd971368b5c9
child 757560 ea95e1785adf49a62fb39f0f3a89be5cd7354770
push id99775
push userkgupta@mozilla.com
push dateTue, 20 Feb 2018 20:37:21 +0000
reviewersnical
bugs1439682
milestone60.0a1
Bug 1439682 - Guard against large chunk allocation failure. r?nical MozReview-Commit-ID: 86bHHKgxxcv
gfx/layers/wr/IpcResourceUpdateQueue.cpp
--- a/gfx/layers/wr/IpcResourceUpdateQueue.cpp
+++ b/gfx/layers/wr/IpcResourceUpdateQueue.cpp
@@ -32,18 +32,21 @@ ShmSegmentsWriter::~ShmSegmentsWriter()
 layers::OffsetRange
 ShmSegmentsWriter::Write(Range<uint8_t> aBytes)
 {
   const size_t start = mCursor;
   const size_t length = aBytes.length();
 
   if (length >= mChunkSize * 4) {
     auto range = AllocLargeChunk(length);
-    uint8_t* dstPtr = mLargeAllocs.LastElement().get<uint8_t>();
-    memcpy(dstPtr, aBytes.begin().get(), length);
+    if (range.length()) {
+      // Allocation was successful
+      uint8_t* dstPtr = mLargeAllocs.LastElement().get<uint8_t>();
+      memcpy(dstPtr, aBytes.begin().get(), length);
+    }
     return range;
   }
 
   int remainingBytesToCopy = length;
 
   size_t srcCursor = 0;
   size_t dstCursor = mCursor;
   size_t currAllocLen = mSmallAllocs.Length();