diff options
| author | Dmitry Antipov <dmantipov@yandex.ru> | 2012-09-06 11:10:25 +0400 |
|---|---|---|
| committer | Dmitry Antipov <dmantipov@yandex.ru> | 2012-09-06 11:10:25 +0400 |
| commit | 0699fc18a5ea00b9a6d64b0e0ebf33b4723beb10 (patch) | |
| tree | fb192a64f6e7adde325ed2aa7296051e9ec16d37 | |
| parent | 4fd78b62d1c815e4dfd7ffe4e7862ef4c4fceaca (diff) | |
| download | emacs-0699fc18a5ea00b9a6d64b0e0ebf33b4723beb10.tar.gz | |
* alloc.c (mark_object): Revert window marking code
since it's unsafe for the Fset_window_configuration.
| -rw-r--r-- | src/ChangeLog | 5 | ||||
| -rw-r--r-- | src/alloc.c | 26 |
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; |
