summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Antipov <dmantipov@yandex.ru>2012-09-06 11:10:25 +0400
committerDmitry Antipov <dmantipov@yandex.ru>2012-09-06 11:10:25 +0400
commit0699fc18a5ea00b9a6d64b0e0ebf33b4723beb10 (patch)
treefb192a64f6e7adde325ed2aa7296051e9ec16d37
parent4fd78b62d1c815e4dfd7ffe4e7862ef4c4fceaca (diff)
downloademacs-0699fc18a5ea00b9a6d64b0e0ebf33b4723beb10.tar.gz
* alloc.c (mark_object): Revert window marking code
since it's unsafe for the Fset_window_configuration.
-rw-r--r--src/ChangeLog5
-rw-r--r--src/alloc.c26
2 files changed, 16 insertions, 15 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 24d290e163d..990cba396e3 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,3 +1,8 @@
+2012-09-06 Dmitry Antipov <dmantipov@yandex.ru>
+
+ * alloc.c (mark_object): Revert window marking code
+ since it's unsafe for the Fset_window_configuration.
+
2012-09-05 Paul Eggert <eggert@cs.ucla.edu>
Fix race conditions with signal handlers and errno.
diff --git a/src/alloc.c b/src/alloc.c
index e90cca637df..aca0a82d1b5 100644
--- a/src/alloc.c
+++ b/src/alloc.c
@@ -6019,22 +6019,18 @@ mark_object (Lisp_Object arg)
case PVEC_WINDOW:
{
struct window *w = (struct window *) ptr;
- bool leaf = NILP (w->hchild) && NILP (w->vchild);
-
- if (leaf && NILP (w->buffer))
- /* If the window is deleted, mark just the window itself. */
- VECTOR_MARK (ptr);
- else
+
+ /* Even if the window is deleted, we can't mark just the window
+ itself because set-window-configuration can resurrect it. */
+ mark_vectorlike (ptr);
+ /* Mark glyphs for leaf windows. Marking window
+ matrices is sufficient because frame matrices
+ use the same glyph memory. */
+ if (NILP (w->hchild) && NILP (w->vchild)
+ && w->current_matrix)
{
- mark_vectorlike (ptr);
- /* Mark glyphs for leaf windows. Marking window
- matrices is sufficient because frame matrices
- use the same glyph memory. */
- if (leaf && w->current_matrix)
- {
- mark_glyph_matrix (w->current_matrix);
- mark_glyph_matrix (w->desired_matrix);
- }
+ mark_glyph_matrix (w->current_matrix);
+ mark_glyph_matrix (w->desired_matrix);
}
}
break;