unofficial mirror of emacs-devel@gnu.org 
 help / color / mirror / code / Atom feed
* Crash displaying byte-code
@ 2008-08-05 11:35 Juanma Barranquero
  2008-08-05 12:18 ` Óscar Fuentes
  2008-08-28 10:25 ` Juanma Barranquero
  0 siblings, 2 replies; 4+ messages in thread
From: Juanma Barranquero @ 2008-08-05 11:35 UTC (permalink / raw)
  To: Emacs Development

I can consistently reproduce this crash, though it is perhaps a bit
specific to my compiler setup, etc.

emacs -Q
M-x ielm <RET>

then type

(let ((standard-output (current-buffer)))
  (setq unibyte-display-via-language-environment t)
  (set-buffer-multibyte nil)
  (backtrace))

Now, the catches:

 - If Emacs is run from inside GDB, it "hangs" for a while and finally
crashes with the attached backtrace 1.
 - If run from the command-line, after doing the above it crashes
immediately; the DrMingw backtrace is a bit different (backtrace 2).
 - It only happens with an optimized build. <sigh>
 - All the above steps are required, including executing the `let'
from inside IELM. In fact, the crash happens while IELM is trying to
display byte-code("...")

This is on Windows XP (Pro and Home) Spanish Edition, Emacs compiled
with gcc "(GCC) 4.3.0 20080305 (alpha-testing) mingw-20080502",
-DENABLE_CHECKING=1 and -fno-crossjumping.

  Juanma


-------------------------------------------------------------------------
------------------------------ backtrace 1 ------------------------------
-------------------------------------------------------------------------

Program received signal SIGSEGV, Segmentation fault.
0x011f45c7 in x_draw_glyph_string_foreground (s=0x82ea60) at w32term.c:1327
1327            font->driver->draw (s, 0, s->nchars, x, y, 0);
(gdb) bt
#0  0x011f45c7 in x_draw_glyph_string_foreground (s=0x82ea60) at w32term.c:1327
#1  0x011f59d7 in x_draw_glyph_string (s=0x82ea60) at w32term.c:2282
#2  0x01056300 in draw_glyphs (w=0x2f77000, x=208, row=0x2dae688,
area=TEXT_AREA, start=1, end=19,
    hl=DRAW_NORMAL_TEXT, overlaps=0) at xdisp.c:20475
#3  0x01059319 in x_write_glyphs (start=0x2e08020, len=18) at xdisp.c:21819
#4  0x0115c449 in update_window_line (w=0x2f77000, vpos=11,
mouse_face_overwritten_p=0x82f0ec) at dispnew.c:4593
#5  0x0115ca7c in update_window (w=0x2f77000, force_p=0) at dispnew.c:4309
#6  0x0115f136 in update_window_tree (w=0x2f77000, force_p=0) at dispnew.c:4002
#7  0x01160924 in update_frame (f=0x2dda800, force_p=0,
inhibit_hairy_id_p=0) at dispnew.c:3930
#8  0x01047481 in redisplay_internal (preserve_echo_area=<value
optimized out>) at xdisp.c:11854
#9  0x0108a5b9 in read_char (commandflag=1, nmaps=2, maps=0x82fb70,
prev_event=47519745, used_mouse_menu=0x82fc34,
    end_time=0x0) at keyboard.c:2652
#10 0x0108ec0a in read_key_sequence (keybuf=0x82fcd4, bufsize=30,
prompt=47519745, dont_downcase_last=0,
    can_return_switch_frame=1, fix_current_buffer=1) at keyboard.c:9349
#11 0x01091d7d in command_loop_1 () at keyboard.c:1620
#12 0x01019006 in internal_condition_case (bfun=0x1091aef
<command_loop_1>, handlers=47583497,
    hfun=0x1088d56 <cmd_error>) at eval.c:1511
#13 0x0108806b in command_loop_2 () at keyboard.c:1338
#14 0x010190b0 in internal_catch (tag=47579569, func=0x1088048
<command_loop_2>, arg=47519745) at eval.c:1247
#15 0x01088b9b in command_loop () at keyboard.c:1317
#16 0x01088eef in recursive_edit_1 () at keyboard.c:942
#17 0x0108905a in Frecursive_edit () at keyboard.c:1004
#18 0x01002c41 in main (argc=2, argv=0xa841e0) at emacs.c:1688


-------------------------------------------------------------------------
------------------------------ backtrace 2 ------------------------------
-------------------------------------------------------------------------

Call stack:
011EEEB2  emacs.exe:011EEEB2  x_draw_glyph_string_background  w32term.c:1265

	...
	      else
	#endif
>	        if (FONT_HEIGHT (s->font) < s->height - 2 * box_line_width
	       || s->font_not_found_p
	       || s->extends_to_end_of_line_p
	...

011F6111  emacs.exe:011F6111  x_draw_glyph_string  w32term.c:2252

	...
	      x_set_glyph_string_clipping (s);
	      x_draw_glyph_string_background (s, 1);
>	      x_draw_glyph_string_box (s);
	      x_set_glyph_string_clipping (s);
	      relief_drawn_p = 1;
	...

01056300  emacs.exe:01056300  draw_glyphs  xdisp.c:20474

	...
	
	  /* Draw all strings.  */
>	  for (s = head; s; s = s->next)
	    FRAME_RIF (f)->draw_glyph_string (s);
	
	...

01059319  emacs.exe:01059319  x_write_glyphs  xdisp.c:21819

	...
	
	  hpos = start - updated_row->glyphs[updated_area];
>	  x = draw_glyphs (updated_window, output_cursor.x,
	   updated_row, updated_area,
	   hpos, hpos + len,
	...

0115C449  emacs.exe:0115C449  update_window_line  dispnew.c:4593

	...
	{
	  rif->cursor_to (vpos, i, desired_row->y, x);
>	  rif->write_glyphs (desired_glyph, desired_row->used[TEXT_AREA] - i);
	  changed_p = 1;
	}
	...

0115CA7C  emacs.exe:0115CA7C  update_window  dispnew.c:4309

	...
	      detect_input_pending_ignore_squeezables ();
	#endif
>	    changed_p |= update_window_line (w, vpos,
	     &mouse_face_overwritten_p);
	
	...

0115F136  emacs.exe:0115F136  update_window_tree  dispnew.c:4002

	...
	paused_p |= update_window_tree (XWINDOW (w->vchild), force_p);
	      else if (w->must_be_updated_p)
>	paused_p |= update_window (w, force_p);
	
	      w = NILP (w->next) ? 0 : XWINDOW (w->next);
	...

01160924  emacs.exe:01160924  update_frame  dispnew.c:3930

	...
	
	      /* Update windows.  */
>	      paused_p = update_window_tree (root_window, force_p);
	      update_end (f);
	
	...

01047481  emacs.exe:01047481  redisplay_internal  xdisp.c:11854

	...
	  /* Update the display.  */
	  set_window_update_flags (XWINDOW (f->root_window), 1);
>	  pause |= update_frame (f, 0, 0);
	#if 0  /* Exiting the loop can leave the wrong value for buffer_shared.  */
	  if (pause)
	...

0108A5B9  emacs.exe:0108A5B9  read_char  keyboard.c:2652

	...
	    redisplay_preserve_echo_area (5);
	  else
>	    redisplay ();
	
	  if (!input_pending)
	...

0108EC0A  emacs.exe:0108EC0A  read_key_sequence  keyboard.c:9349

	...
	    KBOARD *interrupted_kboard = current_kboard;
	    struct frame *interrupted_frame = SELECTED_FRAME ();
>	    key = read_char (NILP (prompt), nmaps,
	     (Lisp_Object *) submaps, last_nonmenu_event,
	     &used_mouse_menu, NULL);
	...

01091D7D  emacs.exe:01091D7D  command_loop_1  keyboard.c:1620

	...
	
	      /* Read next key sequence; i gets its length.  */
>	      i = read_key_sequence (keybuf, sizeof keybuf / sizeof keybuf[0],
	     Qnil, 0, 1, 1);
	
	...

01019006  emacs.exe:01019006  internal_condition_case  eval.c:1511

	...
	  handlerlist = &h;
	
>	  val = (*bfun) ();
	  catchlist = c.next;
	  handlerlist = h.next;
	...

0108806B  emacs.exe:0108806B  command_loop_2  keyboard.c:1339

	...
	  do
	    val = internal_condition_case (command_loop_1, Qerror, cmd_error);
>	  while (!NILP (val));
	
	  return Qnil;
	...

010190B0  emacs.exe:010190B0  internal_catch  eval.c:1247

	...
	  /* Call FUNC.  */
	  if (! _setjmp (c.jmp))
>	    c.val = (*func) (arg);
	
	  /* Throw works by a longjmp that comes right here.  */
	...

01088B9B  emacs.exe:01088B9B  command_loop  keyboard.c:1318

	...
	#endif
	internal_catch (Qtop_level, command_loop_2, Qnil);
>	executing_kbd_macro = Qnil;
	
	/* End of file in -batch run causes exit here.  */
	...

01088EEF  emacs.exe:01088EEF  recursive_edit_1  keyboard.c:942

	...
	  redisplaying_p = 0;
	
>	  val = command_loop ();
	  if (EQ (val, Qt))
	    Fsignal (Qquit, Qnil);
	...

0108905A  emacs.exe:0108905A  Frecursive_edit  keyboard.c:1005

	...
	
	  recursive_edit_1 ();
>	  return unbind_to (count, Qnil);
	}
	
	...

01002C41  emacs.exe:01002C41  main  emacs.c:1691

	...
	  /* NOTREACHED */
	  return 0;
>	}
	
	/* Sort the args so we can find the most important ones
	...

0100124B  emacs.exe:0100124B
01001298  emacs.exe:01001298
7C816FD7  kernel32.dll:7C816FD7  RegisterWaitForInputIdle




^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Crash displaying byte-code
  2008-08-05 11:35 Crash displaying byte-code Juanma Barranquero
@ 2008-08-05 12:18 ` Óscar Fuentes
  2008-08-05 12:36   ` Juanma Barranquero
  2008-08-28 10:25 ` Juanma Barranquero
  1 sibling, 1 reply; 4+ messages in thread
From: Óscar Fuentes @ 2008-08-05 12:18 UTC (permalink / raw)
  To: emacs-devel

"Juanma Barranquero" <lekktu@gmail.com> writes:

> I can consistently reproduce this crash, though it is perhaps a bit
> specific to my compiler setup, etc.
[snip]
> This is on Windows XP (Pro and Home) Spanish Edition, Emacs compiled
> with gcc "(GCC) 4.3.0 20080305 (alpha-testing) mingw-20080502",
> -DENABLE_CHECKING=1 and -fno-crossjumping.

Reproduced on Windows 2000 SP4 English
gcc.exe (GCC) 4.2.1-dw2 (mingw32-2)
Using Emacs default build options.

[snip]

-- 
Oscar





^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Crash displaying byte-code
  2008-08-05 12:18 ` Óscar Fuentes
@ 2008-08-05 12:36   ` Juanma Barranquero
  0 siblings, 0 replies; 4+ messages in thread
From: Juanma Barranquero @ 2008-08-05 12:36 UTC (permalink / raw)
  To: Óscar Fuentes; +Cc: emacs-devel

On Tue, Aug 5, 2008 at 14:18, Óscar Fuentes <ofv@wanadoo.es> wrote:

> Reproduced on Windows 2000 SP4 English
> gcc.exe (GCC) 4.2.1-dw2 (mingw32-2)

Cool.

> Using Emacs default build options.

That's an optimized build, then, same as mine (though different
compilers, OS and language packs).

Thanks.

  Juanma

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: Crash displaying byte-code
  2008-08-05 11:35 Crash displaying byte-code Juanma Barranquero
  2008-08-05 12:18 ` Óscar Fuentes
@ 2008-08-28 10:25 ` Juanma Barranquero
  1 sibling, 0 replies; 4+ messages in thread
From: Juanma Barranquero @ 2008-08-28 10:25 UTC (permalink / raw)
  To: Emacs Development, Jason Rumney

On Tue, Aug 5, 2008 at 13:35, Juanma Barranquero <lekktu@gmail.com> wrote:

> I can consistently reproduce this crash, though it is perhaps a bit
> specific to my compiler setup, etc.
>
> emacs -Q
> M-x ielm <RET>
>
> then type
>
> (let ((standard-output (current-buffer)))
>  (setq unibyte-display-via-language-environment t)
>  (set-buffer-multibyte nil)
>  (backtrace))
>

[Full details at
http://lists.gnu.org/archive/html/emacs-devel/2008-08/msg00236.html]

As far as I can determine (git bisecting the Emacs sources is a real
PITA), the crash started happening after this change:

2008-04-09  Jason Rumney  <jasonr@gnu.org>

        * w32term.c (w32_compute_glyph_string_overhangs): Compute overhangs
        for new font backend and composite cases.

Reverting that change still fails, though. (There's been many commits
to font code after this change, and some of them surely depend on it.)

 Juanma




^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2008-08-28 10:25 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-08-05 11:35 Crash displaying byte-code Juanma Barranquero
2008-08-05 12:18 ` Óscar Fuentes
2008-08-05 12:36   ` Juanma Barranquero
2008-08-28 10:25 ` Juanma Barranquero

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).