mirror of
https://github.com/servo/servo.git
synced 2025-08-04 21:20:23 +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() {
|
for attrib_data in &**self.vertex_attribs.borrow() {
|
||||||
if let Some(buffer) = attrib_data.buffer() {
|
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() {
|
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,
|
offset as u32,
|
||||||
));
|
));
|
||||||
if let Some(old) = data.buffer() {
|
if let Some(old) = data.buffer() {
|
||||||
old.decrement_attached_counter();
|
old.decrement_attached_counter(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
*data = VertexAttribData {
|
*data = VertexAttribData {
|
||||||
|
@ -168,7 +168,7 @@ impl VertexArrayObject {
|
||||||
if b.id() != buffer.id() {
|
if b.id() != buffer.id() {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
b.decrement_attached_counter();
|
b.decrement_attached_counter(false);
|
||||||
}
|
}
|
||||||
attrib.buffer = None;
|
attrib.buffer = None;
|
||||||
}
|
}
|
||||||
|
@ -177,7 +177,7 @@ impl VertexArrayObject {
|
||||||
.get()
|
.get()
|
||||||
.map_or(false, |b| buffer == &*b)
|
.map_or(false, |b| buffer == &*b)
|
||||||
{
|
{
|
||||||
buffer.decrement_attached_counter();
|
buffer.decrement_attached_counter(false);
|
||||||
self.element_array_buffer.set(None);
|
self.element_array_buffer.set(None);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -220,7 +220,7 @@ impl WebGL2RenderingContext {
|
||||||
|
|
||||||
fn unbind_from(&self, slot: &MutNullableDom<WebGLBuffer>, buffer: &WebGLBuffer) {
|
fn unbind_from(&self, slot: &MutNullableDom<WebGLBuffer>, buffer: &WebGLBuffer) {
|
||||||
if slot.get().map_or(false, |b| buffer == &*b) {
|
if slot.get().map_or(false, |b| buffer == &*b) {
|
||||||
buffer.decrement_attached_counter();
|
buffer.decrement_attached_counter(false);
|
||||||
slot.set(None);
|
slot.set(None);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3403,7 +3403,7 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
|
||||||
|
|
||||||
for slot in &[&generic_slot, &indexed_binding.buffer] {
|
for slot in &[&generic_slot, &indexed_binding.buffer] {
|
||||||
if let Some(old) = slot.get() {
|
if let Some(old) = slot.get() {
|
||||||
old.decrement_attached_counter();
|
old.decrement_attached_counter(false);
|
||||||
}
|
}
|
||||||
slot.set(buffer);
|
slot.set(buffer);
|
||||||
}
|
}
|
||||||
|
@ -3481,7 +3481,7 @@ impl WebGL2RenderingContextMethods for WebGL2RenderingContext {
|
||||||
|
|
||||||
for slot in &[&generic_slot, &indexed_binding.buffer] {
|
for slot in &[&generic_slot, &indexed_binding.buffer] {
|
||||||
if let Some(old) = slot.get() {
|
if let Some(old) = slot.get() {
|
||||||
old.decrement_attached_counter();
|
old.decrement_attached_counter(false);
|
||||||
}
|
}
|
||||||
slot.set(buffer);
|
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.set(
|
||||||
self.attached_counter
|
self.attached_counter
|
||||||
.get()
|
.get()
|
||||||
|
@ -172,7 +172,7 @@ impl WebGLBuffer {
|
||||||
.expect("refcount underflowed"),
|
.expect("refcount underflowed"),
|
||||||
);
|
);
|
||||||
if self.is_deleted() {
|
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())));
|
self.send_command(WebGLCommand::BindBuffer(target, buffer.map(|b| b.id())));
|
||||||
if let Some(old) = slot.get() {
|
if let Some(old) = slot.get() {
|
||||||
old.decrement_attached_counter();
|
old.decrement_attached_counter(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
slot.set(buffer);
|
slot.set(buffer);
|
||||||
|
@ -2560,7 +2560,7 @@ impl WebGLRenderingContextMethods for WebGLRenderingContext {
|
||||||
.map_or(false, |b| buffer == &*b)
|
.map_or(false, |b| buffer == &*b)
|
||||||
{
|
{
|
||||||
self.bound_buffer_array.set(None);
|
self.bound_buffer_array.set(None);
|
||||||
buffer.decrement_attached_counter();
|
buffer.decrement_attached_counter(false);
|
||||||
}
|
}
|
||||||
buffer.mark_for_deletion(false);
|
buffer.mark_for_deletion(false);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue