mirror of
https://gitlab.freedesktop.org/wlroots/wlroots.git
synced 2026-05-18 21:38:28 -04:00
drm_syncobj_merger: fix memory leak and sync_fd corruption on error
Fix a memory leak when waiter_init fails in wlr_drm_syncobj_merger_add(), and prevent the old sync_fd from being closed when sync_file_merge fails in wlr_drm_syncobj_merger_add_sync_file().
This commit is contained in:
parent
6b5e2159c4
commit
aee9fa09f0
1 changed files with 4 additions and 0 deletions
|
|
@ -118,6 +118,7 @@ bool wlr_drm_syncobj_merger_add(struct wlr_drm_syncobj_merger *merger,
|
||||||
}
|
}
|
||||||
if (!wlr_drm_syncobj_timeline_waiter_init(&add->waiter, src_timeline, src_point,
|
if (!wlr_drm_syncobj_timeline_waiter_init(&add->waiter, src_timeline, src_point,
|
||||||
flags, loop, export_waiter_handle_ready)) {
|
flags, loop, export_waiter_handle_ready)) {
|
||||||
|
free(add);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
add->merger = merger;
|
add->merger = merger;
|
||||||
|
|
@ -133,6 +134,9 @@ bool wlr_drm_syncobj_merger_add_sync_file(struct wlr_drm_syncobj_merger *merger,
|
||||||
if (merger->sync_fd != -1) {
|
if (merger->sync_fd != -1) {
|
||||||
new_sync = sync_file_merge(merger->sync_fd, fd);
|
new_sync = sync_file_merge(merger->sync_fd, fd);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
if (new_sync < 0) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
close(merger->sync_fd);
|
close(merger->sync_fd);
|
||||||
}
|
}
|
||||||
merger->sync_fd = new_sync;
|
merger->sync_fd = new_sync;
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue