From: Eli Zaretskii <eliz@gnu.org>
To: "Jan Djärv" <jan.h.d@swipnet.se>
Cc: 15575@debbugs.gnu.org
Subject: bug#15575: 24.3.50; New tty menus crash Emacs
Date: Wed, 09 Oct 2013 22:00:34 +0300 [thread overview]
Message-ID: <834n8qqnfx.fsf@gnu.org> (raw)
In-Reply-To: <5D661800-C7B5-495B-BF9D-F2E1F16C9B93@swipnet.se>
> From: Jan Djärv <jan.h.d@swipnet.se>
> Date: Wed, 9 Oct 2013 19:58:57 +0200
> Cc: 15575@debbugs.gnu.org
>
> (gdb) p from->used[0]
> $1 = 30065
> (gdb) p from->used[1]
> $2 = 26977
> (gbd) p from->used[2]
> $3 = 12140
I don't see how this could be true, I guess the compiler fools the
debugger here.
> (gdb) p to->used[0]
> $7 = 4
> (gdb) p to->used[1]
> $8 = 0
> (gdb) p to->used[2]
> $9 = 0
Likewise, this doesn't seem to be possible on a TTY. Sigh...
> (gdb) p to->glyphs[0]
> $10 = (struct glyph *) 0x4
> (gdb) p to->glyphs[1]
> $11 = (struct glyph *) 0x4
> (gdb) p to->glyphs[2]
> $12 = (struct glyph *) 0x4
Neither can this be true, I think. Or maybe I'm missing something.
> (gdb) p sizeof(struct glyph)
> $13 = 48
This one is the only one that makes sense, but it's not a variable, so
I'm not surprised.
> These values vary if run again. Here is another run:
>
> $1 = 12346
> $2 = 384
> $3 = 1
> $4 = (struct glyph *) 0x3000000000000088
> $5 = (struct glyph *) 0x100f11e21
> $6 = (struct glyph *) 0x10180300a
> $7 = 12346
> $8 = 384
> $9 = 1
> $10 = (struct glyph *) 0x104033e00
> $11 = (struct glyph *) 0x1040c48e0
> $12 = (struct glyph *) 0x1040c90e0
> $13 = 48
> $14 = 12731
> $15 = 0
Can you try the patch below?
=== modified file 'src/xdisp.c'
--- src/xdisp.c 2013-10-08 17:49:20 +0000
+++ src/xdisp.c 2013-10-09 18:44:38 +0000
@@ -20589,11 +20589,14 @@ display_menu_bar (struct window *w)
static void
deep_copy_glyph_row (struct glyph_row *to, struct glyph_row *from)
{
- int area, i, sum_used = 0;
+ int area, i;
struct glyph *pointers[1 + LAST_AREA];
/* Save glyph pointers of TO. */
memcpy (pointers, to->glyphs, sizeof to->glyphs);
+ eassert (to->used[0] == from->used[0]);
+ eassert (to->used[1] == from->used[1]);
+ eassert (to->used[2] == from->used[2]);
/* Do a structure assignment. */
*to = *from;
@@ -20601,22 +20604,10 @@ deep_copy_glyph_row (struct glyph_row *t
/* Restore original pointers of TO. */
memcpy (to->glyphs, pointers, sizeof to->glyphs);
- /* Count how many glyphs to copy and update glyph pointers. */
+ /* Count how many glyphs to copy and copy the glyphs. */
for (area = LEFT_MARGIN_AREA; area < LAST_AREA; ++area)
- {
- if (area > LEFT_MARGIN_AREA)
- {
- eassert (from->glyphs[area] - from->glyphs[area - 1]
- == from->used[area - 1]);
- to->glyphs[area] = to->glyphs[area - 1] + to->used[area - 1];
- }
- sum_used += from->used[area];
- }
-
- /* Copy the glyphs. */
- eassert (sum_used <= to->glyphs[LAST_AREA] - to->glyphs[LEFT_MARGIN_AREA]);
- for (i = 0; i < sum_used; i++)
- to->glyphs[LEFT_MARGIN_AREA][i] = from->glyphs[LEFT_MARGIN_AREA][i];
+ for (i = 0; i < from->used[area]; i++)
+ to->glyphs[area][i] = from->glyphs[area][i];
}
/* Display one menu item on a TTY, by overwriting the glyphs in the
next prev parent reply other threads:[~2013-10-09 19:00 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-10-09 17:05 bug#15575: 24.3.50; New tty menus crash Emacs Jan Djärv
2013-10-09 17:41 ` Eli Zaretskii
2013-10-09 17:58 ` Jan Djärv
2013-10-09 18:17 ` Jan Djärv
2013-10-09 18:20 ` Jan Djärv
2013-10-09 19:00 ` Eli Zaretskii [this message]
[not found] ` <97F9A2CA-8E08-4867-93C3-5BAE8DF80D72@swipnet.se>
2013-10-10 16:15 ` Eli Zaretskii
2013-10-10 17:35 ` Jan Djärv
2013-10-10 19:36 ` Eli Zaretskii
2013-10-11 5:44 ` Jan Djärv
2013-10-11 7:09 ` Eli Zaretskii
2013-10-11 8:10 ` Eli Zaretskii
2013-10-11 9:28 ` Eli Zaretskii
2013-10-11 11:06 ` Eli Zaretskii
2013-10-11 16:39 ` Jan Djärv
2013-10-11 17:29 ` Eli Zaretskii
2013-10-11 18:53 ` Jan Djärv
2013-10-11 11:12 ` Jan Djärv
2013-10-11 9:55 ` martin rudalics
2013-10-11 11:09 ` Eli Zaretskii
2013-10-11 11:42 ` martin rudalics
2013-10-11 11:53 ` martin rudalics
2013-10-11 12:04 ` Dani Moncayo
2013-10-11 14:25 ` Eli Zaretskii
2013-10-11 14:43 ` Dani Moncayo
2013-10-11 14:54 ` Eli Zaretskii
2013-10-11 15:02 ` Dani Moncayo
2013-10-11 15:44 ` Eli Zaretskii
2013-10-11 16:37 ` Dani Moncayo
2013-10-11 14:20 ` Eli Zaretskii
2013-10-15 18:27 ` martin rudalics
2013-10-11 14:17 ` Eli Zaretskii
2013-10-11 18:22 ` Eli Zaretskii
2013-10-11 18:49 ` Stefan Monnier
2013-10-11 20:26 ` Eli Zaretskii
2013-10-15 18:27 ` martin rudalics
2013-10-15 19:01 ` Eli Zaretskii
2013-10-16 7:44 ` martin rudalics
2013-10-16 15:21 ` Eli Zaretskii
2013-10-16 17:48 ` martin rudalics
2013-10-16 18:34 ` Eli Zaretskii
2013-10-16 18:45 ` martin rudalics
2013-10-10 20:56 ` Stefan Monnier
2013-10-10 20:59 ` Eli Zaretskii
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=834n8qqnfx.fsf@gnu.org \
--to=eliz@gnu.org \
--cc=15575@debbugs.gnu.org \
--cc=jan.h.d@swipnet.se \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
Code repositories for project(s) associated with this external index
https://git.savannah.gnu.org/cgit/emacs.git
https://git.savannah.gnu.org/cgit/emacs/org-mode.git
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.