bug-gnu-emacs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

bug#16049: 24.3.50; Crash on startup on Mac OS X 10.9


From: martin rudalics
Subject: bug#16049: 24.3.50; Crash on startup on Mac OS X 10.9
Date: Fri, 06 Dec 2013 19:56:51 +0100

> The root cause is grow_mini_window in window.c.
>
> It sets w->pixel_height to a large negative value, and it is all downhill 
from there.
> It is called twice.  Right before w->pixel_height += pixel_height;
>
> the values for pixelwise, w->pixel_height, pixel_height, line_height, 
FRAME_LINE_HEIGTH(f), delta and XINT (height) are:
>
> 1 1 -47 -3 14 13 47
>
> The 1 for w->pixel_height looks wrong.
> This will set w->pixel_height to -46.
> The second call:
>
> 1 -46 -2147483603 .153391685 14 60 0
>
> I'm not sure how this function is supposed to work.  pixel_value is negative 
or it is a huge positive value.  Is it relying on overflow?

IIUC this occurs with pixel values not yet assigned.  That is, the
minibuffer window still has a line and pixel height of 1 but the frame's
character height has already changed so the relations are wrong.

I had this problem on Windows and did in w32fns.c

  /* PXW: This is a duplicate from below.  We have to do it here since
     otherwise x_set_tool_bar_lines will work with the character sizes
     installed by init_frame_faces while the frame's pixel size is still
     calculated from a character size of 1 and we subsequently hit the
     eassert (height >= 0) assertion in window_box_height.  The
     non-pixelwise code apparently worked around this because it had one
     frame line vs one toolbar line which left us with a zero root
     window height which was obviously wrong as well ...  */
  width = FRAME_TEXT_WIDTH (f);
  height = FRAME_TEXT_HEIGHT (f);
  FRAME_TEXT_HEIGHT (f) = 0;
  SET_FRAME_WIDTH (f, 0);
  change_frame_size (f, width, height, 1, 0, 0, 1);

and on GTK where I did in xfns.c completely the same

#ifdef USE_GTK
  /* PXW: This is a duplicate from below.  We have to do it here since
     otherwise x_set_tool_bar_lines will work with the character sizes
     installed by init_frame_faces while the frame's pixel size is still
     calculated from a character size of 1 and we subsequently hit the
     eassert (height >= 0) assertion in window_box_height.  The
     non-pixelwise code apparently worked around this because it had one
     frame line vs one toolbar line which left us with a zero root
     window height which was obviously wrong as well ...  */
  width = FRAME_TEXT_WIDTH (f);
  height = FRAME_TEXT_HEIGHT (f);
  FRAME_TEXT_HEIGHT (f) = 0;
  SET_FRAME_WIDTH (f, 0);
  change_frame_size (f, width, height, 1, 0, 0, 1);
#endif /* USE_GTK */

It's a very weird issue but you didn't make it till window_box_height
apparently, so I don't know whether it's related.

martin





reply via email to

[Prev in Thread] Current Thread [Next in Thread]