From d6ad004b58a67585fac886830627b93ae66ae10c Mon Sep 17 00:00:00 2001 From: tiosgz Date: Wed, 24 Nov 2021 18:55:34 +0000 Subject: [PATCH] fix some memleaks At this point, i don't get any memleaks caused by kiwmi. There may still be some hidden ones though. --- include/input/cursor.h | 1 + include/server.h | 4 ++++ kiwmi/input/cursor.c | 3 +++ kiwmi/luak/kiwmi_cursor.c | 3 ++- kiwmi/luak/kiwmi_server.c | 3 ++- kiwmi/server.c | 4 ++++ 6 files changed, 16 insertions(+), 2 deletions(-) diff --git a/include/input/cursor.h b/include/input/cursor.h index 6ea2161..9f6c570 100644 --- a/include/input/cursor.h +++ b/include/input/cursor.h @@ -43,6 +43,7 @@ struct kiwmi_cursor { struct { struct wl_signal button_down; struct wl_signal button_up; + struct wl_signal destroy; struct wl_signal motion; struct wl_signal scroll; } events; diff --git a/include/server.h b/include/server.h index 95f18fe..1d80631 100644 --- a/include/server.h +++ b/include/server.h @@ -22,6 +22,10 @@ struct kiwmi_server { struct kiwmi_lua *lua; struct kiwmi_desktop desktop; struct kiwmi_input input; + + struct { + struct wl_signal destroy; + } events; }; bool server_init(struct kiwmi_server *server, char *config_path); diff --git a/kiwmi/input/cursor.c b/kiwmi/input/cursor.c index 0b9f770..7fce94a 100644 --- a/kiwmi/input/cursor.c +++ b/kiwmi/input/cursor.c @@ -254,6 +254,7 @@ cursor_create( wl_signal_init(&cursor->events.button_down); wl_signal_init(&cursor->events.button_up); + wl_signal_init(&cursor->events.destroy); wl_signal_init(&cursor->events.motion); wl_signal_init(&cursor->events.scroll); @@ -263,6 +264,8 @@ cursor_create( void cursor_destroy(struct kiwmi_cursor *cursor) { + wl_signal_emit(&cursor->events.destroy, cursor); + wlr_cursor_destroy(cursor->cursor); wlr_xcursor_manager_destroy(cursor->xcursor_manager); diff --git a/kiwmi/luak/kiwmi_cursor.c b/kiwmi/luak/kiwmi_cursor.c index c43ef7a..89dcf07 100644 --- a/kiwmi/luak/kiwmi_cursor.c +++ b/kiwmi/luak/kiwmi_cursor.c @@ -309,7 +309,8 @@ luaK_kiwmi_cursor_new(lua_State *L) struct kiwmi_lua *lua = lua_touserdata(L, 1); struct kiwmi_cursor *cursor = lua_touserdata(L, 2); - struct kiwmi_object *obj = luaK_get_kiwmi_object(lua, cursor, NULL); + struct kiwmi_object *obj = + luaK_get_kiwmi_object(lua, cursor, &cursor->events.destroy); struct kiwmi_object **cursor_ud = lua_newuserdata(L, sizeof(*cursor_ud)); luaL_getmetatable(L, "kiwmi_cursor"); diff --git a/kiwmi/luak/kiwmi_server.c b/kiwmi/luak/kiwmi_server.c index 173156a..4e41d94 100644 --- a/kiwmi/luak/kiwmi_server.c +++ b/kiwmi/luak/kiwmi_server.c @@ -574,7 +574,8 @@ luaK_kiwmi_server_new(lua_State *L) struct kiwmi_lua *lua = lua_touserdata(L, 1); struct kiwmi_server *server = lua_touserdata(L, 2); - struct kiwmi_object *obj = luaK_get_kiwmi_object(lua, server, NULL); + struct kiwmi_object *obj = + luaK_get_kiwmi_object(lua, server, &server->events.destroy); struct kiwmi_object **server_ud = lua_newuserdata(L, sizeof(*server_ud)); luaL_getmetatable(L, "kiwmi_server"); diff --git a/kiwmi/server.c b/kiwmi/server.c index 924017a..35c4ad4 100644 --- a/kiwmi/server.c +++ b/kiwmi/server.c @@ -46,6 +46,8 @@ server_init(struct kiwmi_server *server, char *config_path) struct wlr_renderer *renderer = wlr_backend_get_renderer(server->backend); wlr_renderer_init_wl_display(renderer, server->wl_display); + wl_signal_init(&server->events.destroy); + if (!desktop_init(&server->desktop, renderer)) { wlr_log(WLR_ERROR, "Failed to initialize desktop"); wl_display_destroy(server->wl_display); @@ -132,6 +134,8 @@ server_fini(struct kiwmi_server *server) { wlr_log(WLR_DEBUG, "Shutting down Wayland server"); + wl_signal_emit(&server->events.destroy, server); + wl_display_destroy_clients(server->wl_display); desktop_fini(&server->desktop);