mirror of
https://gitlab.freedesktop.org/wayland/weston.git
synced 2026-05-30 18:48:25 +02:00
backend-pipewire: fix dmabuf memory leak on renderbuffer creation failure
When create_renderbuffer_dmabuf() fails and returns NULL, the previously allocated linux_dmabuf_memory was leaked because pipewire_output_setup_dmabuf() had already been called with no cleanup path. Reorder the calls so that create_renderbuffer_dmabuf() is invoked first. If it fails, explicitly destroy linux_dmabuf_memory and return early to avoid the leak. Signed-off-by: Elliot Chen <elliot.chen@nxp.com>
This commit is contained in:
parent
d36596b25c
commit
615f6c0322
1 changed files with 12 additions and 1 deletions
|
|
@ -745,13 +745,24 @@ pipewire_output_stream_add_buffer(void *data, struct pw_buffer *buffer)
|
|||
"failed to allocate DMABUF buffer");
|
||||
return;
|
||||
}
|
||||
pipewire_output_setup_dmabuf(output, buffer, dmabuf);
|
||||
|
||||
frame_data->renderbuffer =
|
||||
renderer->create_renderbuffer_dmabuf(&output->base,
|
||||
dmabuf->linux_dmabuf_memory,
|
||||
NULL, NULL);
|
||||
/* If rendererbuffer is NULL, the linux_dmabuf_memory
|
||||
* must be released explicitly here.
|
||||
*/
|
||||
if (!frame_data->renderbuffer) {
|
||||
dmabuf->linux_dmabuf_memory->destroy (dmabuf->linux_dmabuf_memory);
|
||||
pipewire_destroy_dmabuf(output, dmabuf);
|
||||
pw_stream_set_error(output->stream, -ENOMEM,
|
||||
"failed to allocate renderbuffer");
|
||||
return;
|
||||
}
|
||||
|
||||
frame_data->dmabuf = dmabuf;
|
||||
pipewire_output_setup_dmabuf(output, buffer, dmabuf);
|
||||
} else if (buffertype & (1u << SPA_DATA_MemFd)) {
|
||||
const struct pixel_format_info *format = output->pixel_format;
|
||||
int stride = output->base.current_mode->width * format->bpp / 8;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue