[PATCH weston v2] xwm: set the shell_surface's title
Axel Davy
davy at clipper.ens.fr
Mon Sep 16 04:27:22 PDT 2013
It crashes in set_title, when called by one of the functions in
XWayland window manager. Looks like it try to free something it isn't
allowed to free (maybe is in use?).
I get the crash with firefox after less than 1 minute playing with the
menus, and with vlc when looking a video and moving the mouse at the
same time during a few minutes.
If I remove the two calls to set_title in XWayland (removing only one
doesn't remove the crash), it fixes the crash.
Axel Davy
On Mon, 16 Sep 2013, Giulio Camuffo wrote:
> How does it crash? And when doing what?
> Giulio
>
>
> 2013/9/15 Axel Davy <davy at clipper.ens.fr>
>
> This patch makes XWayland often crash for me.
>
> Axel Davy
>
> Le 11/09/2013 18:20, Giulio Camuffo a écrit :
> add a new function pointer to the
> weston_shell_interface struct that
> shells will set accordingly.
> ---
> src/compositor.h | 2 ++
> src/shell.c | 11 +++++++++--
> src/xwayland/window-manager.c | 11 +++++++++++
> 3 files changed, 22 insertions(+), 2 deletions(-)
>
> diff --git a/src/compositor.h b/src/compositor.h
> index 3c1b643..ead0c91 100644
> --- a/src/compositor.h
> +++ b/src/compositor.h
> @@ -107,6 +107,8 @@ struct weston_shell_interface {
> int (*move)(struct shell_surface *shsurf,
> struct weston_seat *ws);
> int (*resize)(struct shell_surface *shsurf,
> struct weston_seat *ws,
> uint32_t edges);
> + void (*set_title)(struct shell_surface
> *shsurf,
> + const char *title);
>
> };
>
> diff --git a/src/shell.c b/src/shell.c
> index dc15bfa..ea4315a 100644
> --- a/src/shell.c
> +++ b/src/shell.c
> @@ -1595,13 +1595,19 @@ shell_surface_pong(struct
> wl_client *client, struct wl_resource *resource,
> }
>
> static void
> +set_title(struct shell_surface *shsurf, const char
> *title)
> +{
> + free(shsurf->title);
> + shsurf->title = strdup(title);
> +}
> +
> +static void
> shell_surface_set_title(struct wl_client *client,
> struct wl_resource
> *resource, const char *title)
> {
> struct shell_surface *shsurf =
> wl_resource_get_user_data(resource);
>
> - free(shsurf->title);
> - shsurf->title = strdup(title);
> + set_title(shsurf, title);
> }
>
> static void
> @@ -4583,6 +4589,7 @@ module_init(struct
> weston_compositor *ec,
> ec->shell_interface.set_xwayland =
> set_xwayland;
> ec->shell_interface.move = surface_move;
> ec->shell_interface.resize = surface_resize;
> + ec->shell_interface.set_title = set_title;
>
> wl_list_init(&shell->input_panel.surfaces);
>
> diff --git a/src/xwayland/window-manager.c
> b/src/xwayland/window-manager.c
> index f775734..b4f64d3 100644
> --- a/src/xwayland/window-manager.c
> +++ b/src/xwayland/window-manager.c
> @@ -363,6 +363,8 @@ static void
> weston_wm_window_read_properties(struct
> weston_wm_window *window)
> {
> struct weston_wm *wm = window->wm;
> + struct weston_shell_interface
> *shell_interface =
> +
> &wm->server->compositor->shell_interface;
>
> #define F(field) offsetof(struct weston_wm_window,
> field)
> const struct {
> @@ -468,6 +470,9 @@
> weston_wm_window_read_properties(struct
> weston_wm_window *window)
> }
> free(reply);
> }
> +
> + if (window->shsurf && window->name)
> +
> shell_interface->set_title(window->shsurf,
> window->name);
> }
>
> static void
> @@ -1875,6 +1880,9 @@ surface_destroy(struct
> wl_listener *listener, void *data)
>
> wm_log("surface for xid %d destroyed\n",
> window->id);
>
> + /* This should have been freed by the shell.
> + Don't try to use it later. */
> + window->shsurf = NULL;
> window->surface = NULL;
> }
>
> @@ -2029,6 +2037,9 @@
> xserver_map_shell_surface(struct weston_wm *wm,
>
> window->surface,
>
> &shell_client);
>
> + if (window->name)
> +
> shell_interface->set_title(window->shsurf,
> window->name);
> +
> if (window->fullscreen) {
> window->saved_width = window->width;
> window->saved_height =
> window->height;
>
>
>
>
> _______________________________________________
> wayland-devel mailing list
> wayland-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/wayland-devel
>
>
>
>
More information about the wayland-devel
mailing list