Don't run FOR_EACH_FRAME when there's no frame left (Bug#29961)
This does not fix Bug#29961 but avoids that Emacs segfaults when trying to shut down because it lost connection to the X server. * src/dispnew.c (check_glyph_memory): * src/frame.c (delete_frame): Don't run FOR_EACH_FRAME when there's no frame left (Bug#29961).
This commit is contained in:
parent
c2a88ec8e8
commit
9bf66c6bee
2 changed files with 8 additions and 5 deletions
|
@ -2260,6 +2260,7 @@ check_glyph_memory (void)
|
||||||
Lisp_Object tail, frame;
|
Lisp_Object tail, frame;
|
||||||
|
|
||||||
/* Free glyph memory for all frames. */
|
/* Free glyph memory for all frames. */
|
||||||
|
if (!NILP (Vframe_list))
|
||||||
FOR_EACH_FRAME (tail, frame)
|
FOR_EACH_FRAME (tail, frame)
|
||||||
free_glyphs (XFRAME (frame));
|
free_glyphs (XFRAME (frame));
|
||||||
|
|
||||||
|
|
|
@ -2058,7 +2058,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
|
||||||
|
|
||||||
/* If we've deleted the last_nonminibuf_frame, then try to find
|
/* If we've deleted the last_nonminibuf_frame, then try to find
|
||||||
another one. */
|
another one. */
|
||||||
if (f == last_nonminibuf_frame)
|
if (f == last_nonminibuf_frame && !NILP (Vframe_list))
|
||||||
{
|
{
|
||||||
last_nonminibuf_frame = 0;
|
last_nonminibuf_frame = 0;
|
||||||
|
|
||||||
|
@ -2076,7 +2076,7 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
|
||||||
|
|
||||||
/* If there's no other frame on the same kboard, get out of
|
/* If there's no other frame on the same kboard, get out of
|
||||||
single-kboard state if we're in it for this kboard. */
|
single-kboard state if we're in it for this kboard. */
|
||||||
if (kb != NULL)
|
if (kb != NULL && !NILP (Vframe_list))
|
||||||
{
|
{
|
||||||
/* Some frame we found on the same kboard, or nil if there are none. */
|
/* Some frame we found on the same kboard, or nil if there are none. */
|
||||||
Lisp_Object frame_on_same_kboard = Qnil;
|
Lisp_Object frame_on_same_kboard = Qnil;
|
||||||
|
@ -2093,7 +2093,9 @@ delete_frame (Lisp_Object frame, Lisp_Object force)
|
||||||
/* If we've deleted this keyboard's default_minibuffer_frame, try to
|
/* If we've deleted this keyboard's default_minibuffer_frame, try to
|
||||||
find another one. Prefer minibuffer-only frames, but also notice
|
find another one. Prefer minibuffer-only frames, but also notice
|
||||||
frames with other windows. */
|
frames with other windows. */
|
||||||
if (kb != NULL && EQ (frame, KVAR (kb, Vdefault_minibuffer_frame)))
|
if (kb != NULL
|
||||||
|
&& EQ (frame, KVAR (kb, Vdefault_minibuffer_frame))
|
||||||
|
&& !NILP (Vframe_list))
|
||||||
{
|
{
|
||||||
/* The last frame we saw with a minibuffer, minibuffer-only or not. */
|
/* The last frame we saw with a minibuffer, minibuffer-only or not. */
|
||||||
Lisp_Object frame_with_minibuf = Qnil;
|
Lisp_Object frame_with_minibuf = Qnil;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue