webgl: shutdown webrender before acknowledging Exit message (#34917)

Fixes #34847.

Signed-off-by: Mukilan Thiyagarajan <mukilan@igalia.com>
This commit is contained in:
Mukilan Thiyagarajan 2025-01-09 14:54:50 +05:30 committed by GitHub
parent 3d1b7f8f06
commit 040e29415b
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -296,15 +296,7 @@ impl WebGLThread {
while let Ok(msg) = self.receiver.recv() { while let Ok(msg) = self.receiver.recv() {
let exit = self.handle_msg(msg, &webgl_chan); let exit = self.handle_msg(msg, &webgl_chan);
if exit { if exit {
// Call remove_context functions in order to correctly delete WebRender image keys. break;
let context_ids: Vec<WebGLContextId> = self.contexts.keys().copied().collect();
for id in context_ids {
self.remove_webgl_context(id);
}
// Block on shutting-down WebRender.
self.webrender_api.shut_down(true);
return;
} }
} }
} }
@ -388,6 +380,14 @@ impl WebGLThread {
self.handle_swap_buffers(swap_ids, sender, sent_time); self.handle_swap_buffers(swap_ids, sender, sent_time);
}, },
WebGLMsg::Exit(sender) => { WebGLMsg::Exit(sender) => {
// Call remove_context functions in order to correctly delete WebRender image keys.
let context_ids: Vec<WebGLContextId> = self.contexts.keys().copied().collect();
for id in context_ids {
self.remove_webgl_context(id);
}
// Block on shutting-down WebRender.
self.webrender_api.shut_down(true);
if let Err(e) = sender.send(()) { if let Err(e) = sender.send(()) {
warn!("Failed to send response to WebGLMsg::Exit ({e})"); warn!("Failed to send response to WebGLMsg::Exit ({e})");
} }