Subject: bug#17322: 24.3.90; emacs crash at eassert (verify_row_hash (a)) in dispnew.c:1169

From: Nicolas Richard <[email-masked]>
Date: Wed, 23 Apr 2014 17:49:24 +0200

Eli Zaretskii <[email-masked]> writes:

>> Date: Wed, 23 Apr 2014 16:54:27 +0200
>> From: Nicolas Richard <[email-masked]>
>> CC: [email-masked]
>> 
>> (gdb) frame 2
>> #2  0x08059979 in row_equal_p (a=0xa25151c, b=0xb2a0afc, mouse_face_p=true) at dispnew.c:1169
>> 1169      eassert (verify_row_hash (a));
>> (gdb) pgrowx a
>> TEXT: 19 glyphs
>>   0    0: CHAR[7] pos=993 blev=0,btyp=L w=9 a+d=14+5 face=36 MB
>>   1    9: CHAR[1] pos=994 blev=0,btyp=L w=9 a+d=14+5 face=36 MB
>>   2   18: CHAR[0] pos=995 blev=0,btyp=L w=9 a+d=14+5 face=36 MB
>>   3   27: CHAR[e] pos=996 blev=0,btyp=L w=9 a+d=14+5 face=36 MB
>>   4   36: CHAR[e] pos=997 blev=0,btyp=L w=9 a+d=14+5 face=36 MB
>>   5   45: CHAR[8] pos=998 blev=0,btyp=L w=9 a+d=14+5 face=36 MB
>>   6   54: CHAR[7] pos=999 blev=0,btyp=L w=9 a+d=14+5 face=36 MB
>>   7   63: CHAR[ ] pos=1000 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>   8   72: CHAR[*] pos=1001 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>   9   81: CHAR[ ] pos=1002 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>  10   90: CHAR[c] pos=1003 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>  11   99: CHAR[ ] pos=1004 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>  12  108: CHAR[o] pos=1005 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>  13  117: CHAR[ ] pos=1006 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>  14  126: CHAR[l] pos=1007 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>  15  135: CHAR[d] pos=1008 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>  16  144: CHAR[l] pos=1009 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>  17  153: CHAR[c] pos=1010 blev=0,btyp=L w=9 a+d=14+5 face=26 MB
>>  18  162: CHAR[ ] pos=0 blev=0,btyp=B w=9 a+d=14+5 face=26 MB
>> RIGHT: 1 glyphs
>>   0  171: COMP[0 (32776..21)] pos=-1 w=1012 a+d=0+-9539 face=5 vof=2388 MB slice=32776,0,21,0
>> (gdb) pgrowx b
>> TEXT: 19 glyphs
>>   0    0: CHAR[7] pos=993 blev=0,btyp=L w=9 a+d=14+5 face=21 MB
>>   1    9: CHAR[1] pos=994 blev=0,btyp=L w=9 a+d=14+5 face=21 MB
>>   2   18: CHAR[0] pos=995 blev=0,btyp=L w=9 a+d=14+5 face=21 MB
>>   3   27: CHAR[e] pos=996 blev=0,btyp=L w=9 a+d=14+5 face=21 MB
>>   4   36: CHAR[e] pos=997 blev=0,btyp=L w=9 a+d=14+5 face=21 MB
>>   5   45: CHAR[8] pos=998 blev=0,btyp=L w=9 a+d=14+5 face=21 MB
>>   6   54: CHAR[7] pos=999 blev=0,btyp=L w=9 a+d=14+5 face=21 MB
>>   7   63: CHAR[ ] pos=1000 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>   8   72: CHAR[*] pos=1001 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>   9   81: CHAR[ ] pos=1002 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>  10   90: CHAR[c] pos=1003 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>  11   99: CHAR[ ] pos=1004 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>  12  108: CHAR[o] pos=1005 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>  13  117: CHAR[ ] pos=1006 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>  14  126: CHAR[l] pos=1007 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>  15  135: CHAR[d] pos=1008 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>  16  144: CHAR[l] pos=1009 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>  17  153: CHAR[c] pos=1010 blev=0,btyp=L w=9 a+d=14+5 face=11 MB
>>  18  162: CHAR[ ] pos=0 blev=0,btyp=B w=9 a+d=14+5 MB
>> (gdb) 
>> 
>> fwiw, the chars in the brackets above correspond to a git abbreviated sha1 and a commit message as displayed e.g. in magit log buffers.
>
> Yes, but these two glyph rows _are_ different: they have different
> faces (see the "face=" parts), and also one of them has something
> displayed in the right display margin, while the other doesn't.
>
> Can you tell which part(s) of magit make these changes to the
> displayed material?

I'd say magit-refresh-log-buffer which is defined in magit.el [1], but
I'm no magit expert. The margins are used to show the author name and
the time elapsed since the commit was made. (magit-log, as you guess,
shows a log of commits).

[1] The version I have can be seen here:
https://github.com/magit/magit/blob/2c9e428e180c386bb8684166bca8638991ac0f0a/magit.el#L6309

> Also, what do these commands display?
>
>  (gdb) p/x a->hash
>  (gdb) p/x row_hash(a)

(gdb) p/x a->hash
$4 = 0x7d9d3df
(gdb) p/x row_hash(a)
$5 = 0x7d9d3c8
(gdb) 

-- 
Nico.