Re: [PATCH weston v2] xwm: set the shell_surface's title

2013-09-16 Thread Axel Davy
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 

  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,
                       

Re: [PATCH weston v2] xwm: set the shell_surface's title

2013-09-16 Thread Giulio Camuffo
How does it crash? And when doing what?

Giulio


2013/9/15 Axel Davy 

>
> 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@lists.**freedesktop.org
> http://lists.freedesktop.org/**mailman/listinfo/wayland-devel
>
___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


Re: [PATCH weston v2] xwm: set the shell_surface's title

2013-09-15 Thread Axel Davy


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@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel


[PATCH weston v2] xwm: set the shell_surface's title

2013-09-11 Thread Giulio Camuffo
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;
-- 
1.8.4

___
wayland-devel mailing list
wayland-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/wayland-devel