1
Fork 0
mirror of https://github.com/RGBCube/serenity synced 2025-07-27 03:57:44 +00:00

LibGL: Prevent segfault due to texture destruction

Destruction of `GL::GLContext` resulted in the destruction of
`GPU::Driver` _before_ the destruction of the allocated textures, which
in turn point to `GPU::Image` objects. Since the destruction of
`GPU::Driver` unloads the shared library, we were trying to invoke
non-existing code.

Fix this by moving `m_driver` up in `GLContext` so that it's last in
line for destruction.
This commit is contained in:
Jelle Raaijmakers 2022-09-16 23:41:11 +02:00 committed by Brian Gianforcaro
parent 645f6e3c4a
commit f6dfd77268
2 changed files with 10 additions and 6 deletions

View file

@ -254,6 +254,13 @@ private:
[[nodiscard]] bool should_append_to_listing() const { return m_current_listing_index.has_value(); }
[[nodiscard]] bool should_execute_after_appending_to_listing() const { return m_current_listing_index.has_value() && m_current_listing_index->mode == GL_COMPILE_AND_EXECUTE; }
// FIXME: we store GPU::Texture objects that do not point back to either the driver or device, so we need
// to destruct the latter two at the very end. Fix this by making all GPU objects point back to
// the device that created them, and the device back to the driver.
RefPtr<GPU::Driver> m_driver;
NonnullOwnPtr<GPU::Device> m_rasterizer;
GPU::DeviceInfo const m_device_info;
GLenum m_current_draw_mode;
GLenum m_current_matrix_mode { GL_MODELVIEW };
@ -374,9 +381,6 @@ private:
return m_texture_coordinate_generation[texture_unit][capability - GL_TEXTURE_GEN_S];
}
RefPtr<GPU::Driver> m_driver;
NonnullOwnPtr<GPU::Device> m_rasterizer;
GPU::DeviceInfo const m_device_info;
bool m_sampler_config_is_dirty { true };
bool m_light_state_is_dirty { true };