+2013-04-08 Stefan Monnier <monnier@iro.umontreal.ca>
+
+ * window.c (select_window): Don't record_buffer while the invariant is
+ temporarily broken (bug#14161).
+
+ * fns.c (Fdelq): Don't assume !NILP => CONSP.
+
2013-04-07 Eli Zaretskii <eliz@gnu.org>
* fileio.c (ACL_NOT_WELL_SUPPORTED): Define macro for WINDOWSNT.
#include TERM_HEADER
#endif /* HAVE_WINDOW_SYSTEM */
-/* Variables for blockinput.h: */
+/* Variables for blockinput.h: */
/* Positive if interrupt input is blocked right now. */
volatile int interrupt_input_blocked;
}
idle_timer_ripe = EMACS_TIME_LE (idle_timer_time, idleness_now);
- idle_timer_difference =
- (idle_timer_ripe
- ? sub_emacs_time (idleness_now, idle_timer_time)
- : sub_emacs_time (idle_timer_time, idleness_now));
+ idle_timer_difference
+ = (idle_timer_ripe
+ ? sub_emacs_time (idleness_now, idle_timer_time)
+ : sub_emacs_time (idle_timer_time, idleness_now));
}
/* Decide which timer is the next timer,
w = XWINDOW (window);
w->frozen_window_start_p = 0;
- if (NILP (norecord))
- {
- w->use_time = ++window_select_count;
- record_buffer (w->contents);
- }
-
/* Make the selected window's buffer current. */
Fset_buffer (w->contents);
select_window_1 (window, inhibit_point_swap);
+ /* record_buffer can run QUIT, so make sure it is run only after we have
+ re-established the invariant between selected_window and selected_frame,
+ otherwise the temporary broken invariant might "escape" (bug#14161). */
+ if (NILP (norecord))
+ {
+ w->use_time = ++window_select_count;
+ record_buffer (w->contents);
+ }
+
bset_last_selected_window (XBUFFER (w->contents), window);
windows_or_buffers_changed++;
return window;
replace_window (root, window, 1);
- /* This must become SWINDOW anyway ....... */
+ /* This must become SWINDOW anyway ....... */
if (BUFFERP (w->contents) && !resize_failed)
{
/* Try to minimize scrolling, by setting the window start to the