Subject: Re: bug#21428: 24.5; Crash of emacs on OS X, installed via homebrew cask

From: Rainer M Krug <[email-masked]>
Date: Wed, 30 Sep 2015 12:36:40 +0200

Eli Zaretskii <[email-masked]> writes:

>> From: Rainer M Krug <[email-masked]>
>> Cc: [email-masked],  [email-masked]
>> Date: Wed, 30 Sep 2015 11:49:10 +0200
>> 
>> >> No, I mean continue running with them set to t, and see if the crashes
>> >> in get_glyph_face_and_encoding are prevented by disabling these
>> >> redisplay optimizations.
>> >
>> > OK - got it. So continue the initial plan.
>> 
>> They are all set to t and I got the following crash:
>
> One more theory eats dust.
>
>> Let me know if you need any further info - I will leave the session
>> open.
>
> Just for the record, please show the usual data about this crash: the
> 'used' count of the frame's face cache and the output of "pgrow"
> command in frame #4.

OK:

,----
| (gdb) frame 4
| #4  0x000000010006fb19 in draw_glyphs (w=0x11226a6b8, x=8, row=0x11fa6e100, area=TEXT_AREA, start=0, end=42, hl=DRAW_NORMAL_TEXT, overlaps=0) at xdisp.c:25242
| 25242	  BUILD_GLYPH_STRINGS (i, end, head, tail, hl, x, last_x);
| (gdb) pgrow
| TEXT: 42 glyphs
|   0    0: CHAR[#] pos=1 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|   1    8: CHAR[+] pos=2 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|   2   16: CHAR[S] pos=3 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|   3   24: CHAR[E] pos=4 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|   4   32: CHAR[T] pos=5 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|   5   40: CHAR[U] pos=6 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|   6   48: CHAR[P] pos=7 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|   7   56: CHAR[F] pos=8 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|   8   64: CHAR[I] pos=9 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|   9   72: CHAR[L] pos=10 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  10   80: CHAR[E] pos=11 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  11   88: CHAR[:] pos=12 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  12   96: CHAR[ ] pos=13 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  13  104: CHAR[.] pos=14 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  14  112: CHAR[/] pos=15 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  15  120: CHAR[E] pos=16 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  16  128: CHAR[n] pos=17 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  17  136: CHAR[e] pos=18 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  18  144: CHAR[r] pos=19 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  19  152: CHAR[g] pos=20 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  20  160: CHAR[y] pos=21 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  21  168: CHAR[B] pos=22 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  22  176: CHAR[a] pos=23 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  23  184: CHAR[l] pos=24 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  24  192: CHAR[a] pos=25 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  25  200: CHAR[n] pos=26 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  26  208: CHAR[c] pos=27 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  27  216: CHAR[e] pos=28 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  28  224: CHAR[S] pos=29 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  29  232: CHAR[E] pos=30 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  30  240: CHAR[T] pos=31 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  31  248: CHAR[U] pos=32 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  32  256: CHAR[P] pos=33 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  33  264: CHAR[F] pos=34 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  34  272: CHAR[I] pos=35 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  35  280: CHAR[L] pos=36 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  36  288: CHAR[E] pos=37 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  37  296: CHAR[.] pos=38 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  38  304: CHAR[o] pos=39 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  39  312: CHAR[r] pos=40 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  40  320: CHAR[g] pos=41 blev=0,btyp=L w=8 a+d=14+4 face=48 MB
|  41  328: CHAR[ ] pos=0 blev=0,btyp=B w=8 a+d=14+4 MB
| (gdb) frame 2
| #2  0x0000000100065467 in get_glyph_face_and_encoding (f=0x104811630, glyph=0x11ca93400, char2b=0x7fff5fbfb660) at xdisp.c:24350
| 24350	  eassert (face != NULL);
| (gdb)  p f->face_cache->used
| $1 = 36
| (gdb) frame 4
| #4  0x000000010006fb19 in draw_glyphs (w=0x11226a6b8, x=8, row=0x11fa6e100, area=TEXT_AREA, start=0, end=42, hl=DRAW_NORMAL_TEXT, overlaps=0) at xdisp.c:25242
| 25242	  BUILD_GLYPH_STRINGS (i, end, head, tail, hl, x, last_x);
| (gdb) xbacktrace
| "redisplay_internal (C function)" (0x0)
| (gdb)
`----

face info of the text:

,----
| Face: org-meta-line (sample) (customize this face)
| 
| Documentation:
| Face for meta lines starting with "#+".
| 
| Defined in ‘org-faces.el’.
| 
|            Family: unspecified
|           Foundry: unspecified
|             Width: unspecified
|            Height: unspecified
|            Weight: unspecified
|             Slant: normal
|        Foreground: #008ED1
| DistantForeground: unspecified
|        Background: #EAEAFF
|         Underline: unspecified
|          Overline: unspecified
|    Strike-through: unspecified
|               Box: unspecified
|           Inverse: unspecified
|           Stipple: unspecified
|              Font: unspecified
|           Fontset: unspecified
|           Inherit: unspecified
`----

,----
| There are text properties here:
|   face                 org-meta-line
|   font-lock-fontified  t
|   fontified            t
|   line-prefix          ""
|   org-category         "constrOptim"
|   wrap-prefix          ""
| 
| [back]
`----

>
> I guess we are down to using the brute-force approach after all.  I
> will prepare a series of GDB commands that you need to invoke before
> running a new Emacs session under GDB.  The output will be recorded in
> a file, which I will ask you to send me for analysis when a crash
> happens.

OK - no problem.

>
> To prepare those GDB commands, I need to know how many different
> frames you are normally using.  If only one, the job of preparing
> those commands is easier.

Now we have luck: very seldom more than one, and the crashes occured all
with only one frame used during the whole session.

> If you normally use more than one frame, do the crashes happen when
> you edit in a particular one of them?  IOW, would it be easy for you
> to switch to the frame where the crashes are expected, in order to
> invoke those GDB commands for that one frame?

You don't have to rush with the instructions, as I will only be able to
continue working in emacs tomorrow morning.

Thanks,

Rainer

> Thanks.

-- 
Rainer M. Krug, PhD (Conservation Ecology, SUN), MSc (Conservation Biology, UCT), Dipl. Phys. (Germany)

Centre of Excellence for Invasion Biology
Stellenbosch University
South Africa

Tel :       +33 - (0)9 53 10 27 44
Cell:       +33 - (0)6 85 62 59 98
Fax :       +33 - (0)9 58 10 27 44

Fax (D):    +49 - (0)3 21 21 25 22 44

email:      [email-masked]

Skype:      RMkrug

PGP: 0x0F52F982