author Andrew Osmond <>
Mon, 11 Sep 2017 08:39:30 -0400
changeset 424048 0b5841c7c3992c2c0a43cb77b51b3fd04b63b7d6
parent 421475 afd60ed8ffad2c649170f3d7a4e84e0ce4a74477
child 433506 4d4527934c6c9dbf9c181ed3db74b070440aaf33
permissions -rw-r--r--
Bug 1397223 - Gracefully handle failures in SurfaceCacheImpl::StartTracking. r=tnikkel, a=lizzard When the surface cache starts tracking an unlocked surface, it must insert it into the expiration tracker, so that it can be freed later if it is remains unused. ExpirationTrackerImpl::AddObjectLocked can fail due to out-of-memory conditions or during shutdown, which we previously ignored, and could leave us in a state where we think the surface is in the tracker but is not. When we later try to mark the surface as used in the tracker, it will hit a release assert because it doesn't exist. Now we handle the insertion failure by discarding the surface. Marking the surface as used can itself encounter a similar issue, and we handle it the same way.

members = [

codegen-units = 4

opt-level = 3
# Uncomment to profile on Linux:
# debug = true
# lto = false

# If you need to temporarily test Servo with a local fork of some upstream
# crate, add that here. Use the form:
#     <crate> = { path = "/path/to/local/checkout" }