mirror of
https://codeberg.org/dwl/dwl.git
synced 2026-11-12 16:13:20 +00:00
fix a buffer leak in outputmgrapplyortest()
wlr_swapchain_acquire() returns a locked buffer and wlr_output_state_set_buffer() takes its own lock, so every output enabled through output management (wlr-randr, kanshi) leaked a buffer. Unlock it once the state holds it, as wlr_output_swapchain_manager does.
This commit is contained in:
@@ -2284,8 +2284,12 @@ outputmgrapplyortest(struct wlr_output_configuration_v1 *config, int test)
|
|||||||
for (i = 0; i < states_len; i++) {
|
for (i = 0; i < states_len; i++) {
|
||||||
struct wlr_swapchain *swapchain = wlr_output_swapchain_manager_get_swapchain(
|
struct wlr_swapchain *swapchain = wlr_output_swapchain_manager_get_swapchain(
|
||||||
&swapchain_manager, states[i].output);
|
&swapchain_manager, states[i].output);
|
||||||
if (swapchain && !states[i].output->enabled)
|
struct wlr_buffer *buffer;
|
||||||
wlr_output_state_set_buffer(&states[i].base, wlr_swapchain_acquire(swapchain));
|
if (swapchain && !states[i].output->enabled
|
||||||
|
&& (buffer = wlr_swapchain_acquire(swapchain))) {
|
||||||
|
wlr_output_state_set_buffer(&states[i].base, buffer);
|
||||||
|
wlr_buffer_unlock(buffer);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(ok = wlr_backend_commit(backend, states, states_len)))
|
if (!(ok = wlr_backend_commit(backend, states, states_len)))
|
||||||
|
|||||||
Reference in New Issue
Block a user