mirror of
https://github.com/servo/servo.git
synced 2025-08-03 04:30:10 +01:00
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:
commit
a927f1ad8a
4 changed files with 12 additions and 12 deletions
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue