[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
bug#55760: 28.1; SIGSEGV in 80x26 terminal window
From: |
Eli Zaretskii |
Subject: |
bug#55760: 28.1; SIGSEGV in 80x26 terminal window |
Date: |
Thu, 02 Jun 2022 13:50:56 +0300 |
> Cc: 55760@debbugs.gnu.org
> Date: Thu, 02 Jun 2022 11:33:55 +0300
> From: Eli Zaretskii <eliz@gnu.org>
>
> > Cc: ture@turepalsson.se
> > From: Ture Pålsson <ture@turepalsson.se>
> > Date: Thu, 02 Jun 2022 07:58:47 +0200
> >
> >
> > Running Emacs in a terminal window which is 26 rows by 80 columns
> > consistently causes a SIGSEGV. Other window sizes work fine. I can
> > reproduce on macOS/x86, macOS/Apple Silicon, Linux/x86 and Linux/ARM,
> > with xterm and Terminal.app, locally or at the other end of an ssh
> > session.
>
> Thanks. I can reproduce this, and will look into it.
Should hopefully be fixed now on the emacs-28 branch of the Emacs Git
repository. The patch is below for your convenience; please try that
if you can and see if the problem went away.
Thanks.
diff --git a/src/dispnew.c b/src/dispnew.c
index 332ba54..39e5469 100644
--- a/src/dispnew.c
+++ b/src/dispnew.c
@@ -1837,7 +1837,18 @@ adjust_frame_glyphs (struct frame *f)
if (FRAME_WINDOW_P (f))
adjust_frame_glyphs_for_window_redisplay (f);
else
- adjust_frame_glyphs_for_frame_redisplay (f);
+ {
+ adjust_frame_glyphs_for_frame_redisplay (f);
+ eassert (FRAME_INITIAL_P (f)
+ || noninteractive
+ || !initialized
+ || (f->current_matrix
+ && f->current_matrix->nrows > 0
+ && f->current_matrix->rows
+ && f->desired_matrix
+ && f->desired_matrix->nrows > 0
+ && f->desired_matrix->rows));
+ }
/* Don't forget the buffer for decode_mode_spec. */
adjust_decode_mode_spec_buffer (f);
@@ -2119,6 +2130,19 @@ adjust_frame_glyphs_for_frame_redisplay (struct frame *f)
SET_FRAME_GARBAGED (f);
}
}
+ else if (!FRAME_INITIAL_P (f) && !noninteractive && initialized)
+ {
+ if (!f->desired_matrix->nrows || !f->desired_matrix->rows)
+ {
+ adjust_glyph_matrix (NULL, f->desired_matrix, 0, 0, matrix_dim);
+ SET_FRAME_GARBAGED (f);
+ }
+ if (!f->current_matrix->nrows || !f->current_matrix->rows)
+ {
+ adjust_glyph_matrix (NULL, f->current_matrix, 0, 0, matrix_dim);
+ SET_FRAME_GARBAGED (f);
+ }
+ }
}