Auto merge of #25998 - jdm:vao-drop, r=nox

Avoid a panic when closing webgl pages using VAOs

- [x] `./mach build -d` does not report any errors
- [x] `./mach test-tidy` does not report any errors
- [x] These changes fix #25891
- [x] These changes do not require tests because GC behaviour at shutdown is nondeterministic and difficult to test
This commit is contained in:
bors-servo 2020-03-27 09:55:12 -04:00 committed by GitHub
commit a927f1ad8a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 12 additions and 12 deletions

View file

@ -59,11 +59,11 @@ impl VertexArrayObject {
for attrib_data in &**self.vertex_attribs.borrow() {
if let Some(buffer) = attrib_data.buffer() {
buffer.decrement_attached_counter();
buffer.decrement_attached_counter(fallible);
}
}
if let Some(buffer) = self.element_array_buffer.get() {
buffer.decrement_attached_counter();
buffer.decrement_attached_counter(fallible);
}
}
@ -136,7 +136,7 @@ impl VertexArrayObject {
offset as u32,
));
if let Some(old) = data.buffer() {
old.decrement_attached_counter();
old.decrement_attached_counter(false);
}
*data = VertexAttribData {
@ -168,7 +168,7 @@ impl VertexArrayObject {
if b.id() != buffer.id() {
continue;
}
b.decrement_attached_counter();
b.decrement_attached_counter(false);
}
attrib.buffer = None;
}
@ -177,7 +177,7 @@ impl VertexArrayObject {
.get()
.map_or(false, |b| buffer == &*b)
{
buffer.decrement_attached_counter();
buffer.decrement_attached_counter(false);
self.element_array_buffer.set(None);
}
}

View file

@ -220,7 +220,7 @@ impl WebGL2RenderingContext {
fn unbind_from(&self, slot: &MutNullableDom<WebGLBuffer>, buffer: &WebGLBuffer) {
if slot.get().map_or(false, |b| buffer == &*b) {
buffer.decrement_attached_counter();
buffer.decrement_attached_counter(false);
slot.set(None);
}
}
@ -3403,7 +3403,7 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
for slot in &[&generic_slot, &indexed_binding.buffer] {
if let Some(old) = slot.get() {
old.decrement_attached_counter();
old.decrement_attached_counter(false);
}
slot.set(buffer);
}
@ -3481,7 +3481,7 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
for slot in &[&generic_slot, &indexed_binding.buffer] {
if let Some(old) = slot.get() {
old.decrement_attached_counter();
old.decrement_attached_counter(false);
}
slot.set(buffer);
}

View file

@ -164,7 +164,7 @@ impl WebGLBuffer {
);
}
pub fn decrement_attached_counter(&self) {
pub fn decrement_attached_counter(&self, fallible: bool) {
self.attached_counter.set(
self.attached_counter
.get()
@ -172,7 +172,7 @@ impl WebGLBuffer {
.expect("refcount underflowed"),
);
if self.is_deleted() {
self.delete(false);
self.delete(fallible);
}
}

View file

@ -1312,7 +1312,7 @@ impl WebGLRenderingContext {
self.send_command(WebGLCommand::BindBuffer(target, buffer.map(|b| b.id())));
if let Some(old) = slot.get() {
old.decrement_attached_counter();
old.decrement_attached_counter(false);
}
slot.set(buffer);
@ -2560,7 +2560,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
.map_or(false, |b| buffer == &*b)
{
self.bound_buffer_array.set(None);
buffer.decrement_attached_counter();
buffer.decrement_attached_counter(false);
}
buffer.mark_for_deletion(false);
}