[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Crash in redisplay_internal -> note_mode_line_or_margin_highlight
From: |
Chong Yidong |
Subject: |
Re: Crash in redisplay_internal -> note_mode_line_or_margin_highlight |
Date: |
Mon, 09 Apr 2007 12:25:16 -0400 |
User-agent: |
Gnus/5.11 (Gnus v5.11) Emacs/22.0.97 (gnu/linux) |
David Reitter <address@hidden> writes:
> This crash occurred with a (slightly modified) CVS version
> (2007-04-04), Carbon build.
>
> I was trying out tabbar.el (providing tabbar-mode) using PNG files
> for `tabbar-home-button-enabled-image' and the other tabbar buttons.
> I think I clicked on the "mode" (leftmost) button before this
> happened, but I'm not sure.
I can't reproduce this patch, but I can see how it could conceivably
happen.
Kim, could you study this patch and tell me what you think?
*** emacs/src/xdisp.c.~1.1145.~ 2007-04-09 11:36:15.000000000 -0400
--- emacs/src/xdisp.c 2007-04-09 12:23:04.000000000 -0400
***************
*** 22437,22443 ****
Lisp_Object mouse_face;
int original_x_pixel = x;
! struct glyph * glyph = NULL;
struct glyph_row *row;
if (area == ON_MODE_LINE || area == ON_HEADER_LINE)
--- 22437,22443 ----
Lisp_Object mouse_face;
int original_x_pixel = x;
! struct glyph * glyph = NULL, * row_start_glyph = NULL;
struct glyph_row *row;
if (area == ON_MODE_LINE || area == ON_HEADER_LINE)
***************
*** 22455,22461 ****
/* Find glyph */
if (row->mode_line_p && row->enabled_p)
{
! glyph = row->glyphs[TEXT_AREA];
end = glyph + row->used[TEXT_AREA];
for (x0 = original_x_pixel;
--- 22455,22461 ----
/* Find glyph */
if (row->mode_line_p && row->enabled_p)
{
! glyph = row_start_glyph = row->glyphs[TEXT_AREA];
end = glyph + row->used[TEXT_AREA];
for (x0 = original_x_pixel;
***************
*** 22579,22590 ****
is converted to a flatten by emacs lisp interpreter.
The internal string is an element of the structures.
The displayed string is the flatten string. */
! for (tmp_glyph = glyph - 1, gpos = 0;
! tmp_glyph->charpos >= XINT (b);
! tmp_glyph--, gpos++)
{
! if (!EQ (tmp_glyph->object, glyph->object))
! break;
}
/* Calculate the lenght(glyph sequence length: GSEQ_LENGTH) of
--- 22579,22594 ----
is converted to a flatten by emacs lisp interpreter.
The internal string is an element of the structures.
The displayed string is the flatten string. */
! gpos = 0;
! if (glyph != row_start_glyph)
{
! for (tmp_glyph = glyph - 1;
! tmp_glyph->charpos >= XINT (b);
! tmp_glyph--, gpos++)
! {
! if (!EQ (tmp_glyph->object, glyph->object))
! break;
! }
}
/* Calculate the lenght(glyph sequence length: GSEQ_LENGTH) of