compositor: add destructors to shell plugins

Add a new wlsc_shell API function for destroying the shell plugin
object. Helps to reduce Valgrind reports.

Signed-off-by: Pekka Paalanen <ppaalanen@gmail.com>
This commit is contained in:
Pekka Paalanen 2011-12-22 13:43:43 +02:00
parent f258a310bf
commit 3c64723c9f
4 changed files with 25 additions and 2 deletions

View File

@ -2172,6 +2172,8 @@ int main(int argc, char *argv[])
if (xserver) if (xserver)
wlsc_xserver_destroy(ec); wlsc_xserver_destroy(ec);
ec->shell->destroy(ec->shell);
if (ec->has_bind_display) if (ec->has_bind_display)
ec->unbind_display(ec->display, display); ec->unbind_display(ec->display, display);

View File

@ -161,6 +161,7 @@ struct wlsc_shell {
void (*configure)(struct wlsc_shell *shell, void (*configure)(struct wlsc_shell *shell,
struct wlsc_surface *surface, struct wlsc_surface *surface,
int32_t x, int32_t y, int32_t width, int32_t height); int32_t x, int32_t y, int32_t width, int32_t height);
void (*destroy)(struct wlsc_shell *shell);
}; };
enum { enum {

View File

@ -58,7 +58,7 @@ struct wl_shell {
struct wl_list panels; struct wl_list panels;
struct { struct {
const char *path; char *path;
int duration; int duration;
struct wl_resource *binding; struct wl_resource *binding;
struct wl_list surfaces; struct wl_list surfaces;
@ -123,7 +123,6 @@ shell_configuration(struct wl_shell *shell)
shell->screensaver.duration = duration; shell->screensaver.duration = duration;
return ret; return ret;
/* FIXME: free(shell->screensaver.path) on plugin fini */
} }
static void static void
@ -1234,6 +1233,15 @@ bind_screensaver(struct wl_client *client,
wl_resource_destroy(resource, 0); wl_resource_destroy(resource, 0);
} }
static void
shell_destroy(struct wlsc_shell *base)
{
struct wl_shell *shell = container_of(base, struct wl_shell, shell);
free(shell->screensaver.path);
free(shell);
}
int int
shell_init(struct wlsc_compositor *ec); shell_init(struct wlsc_compositor *ec);
@ -1252,6 +1260,7 @@ shell_init(struct wlsc_compositor *ec)
shell->shell.unlock = unlock; shell->shell.unlock = unlock;
shell->shell.map = map; shell->shell.map = map;
shell->shell.configure = configure; shell->shell.configure = configure;
shell->shell.destroy = shell_destroy;
wl_list_init(&shell->hidden_surface_list); wl_list_init(&shell->hidden_surface_list);
wl_list_init(&shell->backgrounds); wl_list_init(&shell->backgrounds);

View File

@ -511,6 +511,16 @@ bind_shell(struct wl_client *client, void *data, uint32_t version, uint32_t id)
wl_client_add_resource(client, &shell->resource); wl_client_add_resource(client, &shell->resource);
} }
static void
tablet_shell_destroy(struct wlsc_shell *base)
{
struct tablet_shell *shell =
container_of(base, struct tablet_shell, shell);
wl_event_source_remove(shell->long_press_source);
free(shell);
}
void void
shell_init(struct wlsc_compositor *compositor); shell_init(struct wlsc_compositor *compositor);
@ -552,6 +562,7 @@ shell_init(struct wlsc_compositor *compositor)
shell->shell.unlock = tablet_shell_unlock; shell->shell.unlock = tablet_shell_unlock;
shell->shell.map = tablet_shell_map; shell->shell.map = tablet_shell_map;
shell->shell.configure = tablet_shell_configure; shell->shell.configure = tablet_shell_configure;
shell->shell.destroy = tablet_shell_destroy;
launch_ux_daemon(shell); launch_ux_daemon(shell);