metacity r3787 - in trunk: . src/core
- From: tthurman svn gnome org
- To: svn-commits-list gnome org
- Subject: metacity r3787 - in trunk: . src/core
- Date: Sun, 13 Jul 2008 22:16:24 +0000 (UTC)
Author: tthurman
Date: Sun Jul 13 22:16:23 2008
New Revision: 3787
URL: http://svn.gnome.org/viewvc/metacity?rev=3787&view=rev
Log:
2008-07-13 Elijah Newren <newren gmail com>
* src/core/workspace.c (meta_workspace_free): Don't attempt to
double-free struts, edges and regions if work areas have already
been invalidated at the time of freeing a workspace.
Possible fix to #361804.
Modified:
trunk/ (props changed)
trunk/ChangeLog
trunk/src/core/workspace.c
Modified: trunk/src/core/workspace.c
==============================================================================
--- trunk/src/core/workspace.c (original)
+++ trunk/src/core/workspace.c Sun Jul 13 22:16:23 2008
@@ -116,15 +116,25 @@
g_free (workspace->work_area_xinerama);
g_list_free (workspace->mru_list);
- g_slist_free (workspace->all_struts);
g_list_free (workspace->list_containing_self);
- for (i = 0; i < screen->n_xinerama_infos; i++)
- meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]);
- g_free (workspace->xinerama_region);
- meta_rectangle_free_list_and_elements (workspace->screen_region);
- meta_rectangle_free_list_and_elements (workspace->screen_edges);
- meta_rectangle_free_list_and_elements (workspace->xinerama_edges);
+ /* screen.c:update_num_workspaces(), which calls us, removes windows from
+ * workspaces first, which can cause the workareas on the workspace to be
+ * invalidated (and hence for struts/regions/edges to be freed).
+ * So, no point trying to double free it; that causes a crash
+ * anyway. #361804.
+ */
+
+ if (!workspace->work_areas_invalid)
+ {
+ g_slist_free (workspace->all_struts);
+ for (i = 0; i < screen->n_xinerama_infos; i++)
+ meta_rectangle_free_list_and_elements (workspace->xinerama_region[i]);
+ g_free (workspace->xinerama_region);
+ meta_rectangle_free_list_and_elements (workspace->screen_region);
+ meta_rectangle_free_list_and_elements (workspace->screen_edges);
+ meta_rectangle_free_list_and_elements (workspace->xinerama_edges);
+ }
g_free (workspace);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]