emacs-devel
[Top][All Lists]
Advanced

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

GC loop in 64bit emacs 24.1


From: Kalman Reti
Subject: GC loop in 64bit emacs 24.1
Date: Thu, 4 Oct 2012 09:29:15 -0400

After noticing a few hangs in 64bit emacs 24.1 on x86 linux, I decided
to run it under gdb and caught one.

It is looping in the following code from alloc.c; a put a breakpoint
on line 1166 and made it conditional upon's
tem's having a particular value.  (This was after it had been looping
for tens of minutes already.)  Sure enough,
I keep hitting the breakpoint.

So, the question for emacs-devel is what do I need to do in this emacs
to fix things up so I can continue?

 -- Kalman

Breakpoint 3, lisp_align_free (block=0x96c16c00) at alloc.c:1166
1166                tem = &(*tem)->x.next_free;
$5452 = (struct ablock **) 0x4aed0000
(gdb) list 1150
1145      /* Put on free list.  */
1146      ablock->x.next_free = free_ablock;
1147      free_ablock = ablock;
1148      /* Update busy count.  */
1149      ABLOCKS_BUSY (abase) =
1150        (struct ablocks *) (-2 + (intptr_t) ABLOCKS_BUSY (abase));
1151    
1152      if (2 > (intptr_t) ABLOCKS_BUSY (abase))
1153        { /* All the blocks are free.  */
1154          int i = 0, aligned = (intptr_t) ABLOCKS_BUSY (abase);
(gdb) list
1155          struct ablock **tem = &free_ablock;
1156          struct ablock *atop = &abase->blocks[aligned ? ABLOCKS_SIZE
: ABLOCKS_SIZE - 1];
1157    
1158          while (*tem)
1159            {
1160              if (*tem >= (struct ablock *) abase && *tem < atop)
1161                {
1162                  i++;
1163                  *tem = (*tem)->x.next_free;
1164                }
(gdb) list
1165              else
1166                tem = &(*tem)->x.next_free;
1167            }
1168          eassert ((aligned & 1) == aligned);
1169          eassert (i == (aligned ? ABLOCKS_SIZE : ABLOCKS_SIZE - 1));
1170    #ifdef USE_POSIX_MEMALIGN
1171          eassert ((uintptr_t) ABLOCKS_BASE (abase) % BLOCK_ALIGN == 0);
1172    #endif
1173          free (ABLOCKS_BASE (abase));
1174        }
(gdb)



reply via email to

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