[Top][All Lists]
[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)
[Prev in Thread] |
Current Thread |
[Next in Thread] |
- GC loop in 64bit emacs 24.1,
Kalman Reti <=