[PATCH weston 2/2] main: don't leak option strings
Bill Spitzak
spitzak at gmail.com
Fri Sep 5 18:08:44 PDT 2014
I think if the strdup's were removed it would get rid of the memory leak
in a much cleaner way.
On 09/05/2014 03:32 PM, Ryo Munakata wrote:
> Signed-off-by: Ryo Munakata <ryomnktml at gmail.com>
> ---
> src/compositor.c | 45 +++++++++++++++++++--------------------------
> 1 file changed, 19 insertions(+), 26 deletions(-)
>
> diff --git a/src/compositor.c b/src/compositor.c
> index 0ecae23..de58c59 100644
> --- a/src/compositor.c
> +++ b/src/compositor.c
> @@ -4328,15 +4328,13 @@ int main(int argc, char *argv[])
> struct weston_config *config);
> int i, fd;
> char *backend = NULL;
> - char *option_backend = NULL;
> char *shell = NULL;
> - char *option_shell = NULL;
> char *modules, *option_modules = NULL;
> char *log = NULL;
> char *server_socket = NULL, *end;
> int32_t idle_time = 300;
> int32_t help = 0;
> - const char *socket_name = NULL;
> + char *socket_name = NULL;
> int32_t version = 0;
> int32_t noconfig = 0;
> int32_t numlock_on;
> @@ -4347,8 +4345,8 @@ int main(int argc, char *argv[])
> struct weston_seat *seat;
>
> const struct weston_option core_options[] = {
> - { WESTON_OPTION_STRING, "backend", 'B', &option_backend },
> - { WESTON_OPTION_STRING, "shell", 0, &option_shell },
> + { WESTON_OPTION_STRING, "backend", 'B', &backend },
> + { WESTON_OPTION_STRING, "shell", 0, &shell },
> { WESTON_OPTION_STRING, "socket", 'S', &socket_name },
> { WESTON_OPTION_INTEGER, "idle-time", 'i', &idle_time },
> { WESTON_OPTION_STRING, "modules", 0, &option_modules },
> @@ -4409,17 +4407,13 @@ int main(int argc, char *argv[])
> }
> section = weston_config_get_section(config, "core", NULL, NULL);
>
> - if (option_backend)
> - backend = strdup(option_backend);
> - else
> - weston_config_section_get_string(section, "backend", &backend,
> - NULL);
> -
> - if (!backend)
> - backend = weston_choose_default_backend();
> + if (!backend) {
> + weston_config_section_get_string(section, "backend", &backend, NULL);
> + if (!backend)
> + backend = weston_choose_default_backend();
> + }
>
> backend_init = weston_load_module(backend, "backend_init");
> - free(backend);
> if (!backend_init) {
> ret = EXIT_FAILURE;
> goto out_signals;
> @@ -4473,24 +4467,16 @@ int main(int argc, char *argv[])
> goto out;
> }
>
> - if (option_shell)
> - shell = strdup(option_shell);
> - else
> + if (!shell)
> weston_config_section_get_string(section, "shell", &shell,
> "desktop-shell.so");
>
> - if (load_modules(ec, shell, &argc, argv) < 0) {
> - free(shell);
> + if (load_modules(ec, shell, &argc, argv) < 0)
> goto out;
> - }
> - free(shell);
>
> weston_config_section_get_string(section, "modules", &modules, "");
> - if (load_modules(ec, modules, &argc, argv) < 0) {
> - free(modules);
> + if (load_modules(ec, modules, &argc, argv) < 0)
> goto out;
> - }
> - free(modules);
>
> if (load_modules(ec, option_modules, &argc, argv) < 0)
> goto out;
> @@ -4510,7 +4496,7 @@ int main(int argc, char *argv[])
>
> wl_display_run(display);
>
> - out:
> +out:
> /* prevent further rendering while shutting down */
> ec->state = WESTON_COMPOSITOR_OFFSCREEN;
>
> @@ -4529,5 +4515,12 @@ out_signals:
>
> weston_log_file_close();
>
> + free(backend);
> + free(shell);
> + free(socket_name);
> + free(option_modules);
> + free(log);
> + free(modules);
> +
> return ret;
> }
>
More information about the wayland-devel
mailing list