Fix memory leak in DRM

Signed-off-by: Slendi <slendi@socopon.com>
This commit is contained in:
2025-10-02 10:06:42 +03:00
parent f74937bb6a
commit 7a5c305a06
3 changed files with 24 additions and 16 deletions

View File

@@ -36,6 +36,7 @@
ninja
(pkgs.llvmPackages_20.clang-tools.override { enableLibcxx = true; })
lldb
valgrind
lua

View File

@@ -266,6 +266,13 @@ void LunarWM_destroy(LunarWM *wm)
LunarWM_wayland_cleanup(wm);
cleanup_lua_cfg(wm);
for (size_t i = 0; i < ARRAY_SZ(wm->wm.workspaces); ++i) {
if (wm->wm.workspaces[i].v_windows) {
vector_free(wm->wm.workspaces[i].v_windows);
wm->wm.workspaces[i].v_windows = NULL;
}
}
memset(wm, 0, sizeof(*wm));
}
@@ -425,10 +432,10 @@ void LunarWM_run(LunarWM *wm)
wlr_log(WLR_ERROR, "Failed to end OpenXR frame");
return;
}
EndDrawing();
} else {
wm->renderer.camera.fovy = 75;
}
EndDrawing();
}
}

View File

@@ -1654,20 +1654,6 @@ static void handle_output_frame(struct wl_listener *listener, void *data)
// wm->renderer.main_rt = LoadRenderTexture(width, height);
// }
if (!wlr_render_pass_submit(pass)) {
wlr_output_state_finish(&state);
wlr_output_schedule_frame(wlr_output);
wlr_log(WLR_ERROR, "Failed to submit render pass for output %s",
wlr_output->name);
return;
}
if (!wlr_output_commit_state(wlr_output, &state)) {
wlr_output_state_finish(&state);
wlr_output_schedule_frame(wlr_output);
return;
}
wm->renderer.tmp_rt.id = drawFboId;
wm->renderer.tmp_rt.texture = (Texture) {
.id = drawFboId,
@@ -1742,6 +1728,20 @@ static void handle_output_frame(struct wl_listener *listener, void *data)
wm->renderer.camera.target, wm->cman->cfg.space.radius);
}
if (!wlr_render_pass_submit(pass)) {
wlr_output_state_finish(&state);
wlr_output_schedule_frame(wlr_output);
wlr_log(WLR_ERROR, "Failed to submit render pass for output %s",
wlr_output->name);
return;
}
if (!wlr_output_commit_state(wlr_output, &state)) {
wlr_output_state_finish(&state);
wlr_output_schedule_frame(wlr_output);
return;
}
wlr_output_state_finish(&state);
}