(gdb) bt #0 0x00007f8ac115bebe in __lll_lock_wait_private () from /lib64/libc.so.6 #1 0x00007f8ac10f22be in _L_lock_9876 () from /lib64/libc.so.6 #2 0x00007f8ac10f05c1 in free () from /lib64/libc.so.6 #3 0x0000000000402649 in handle_sig (signo=<optimized out>, info=<optimized out>, context=<optimized out>) at lol.c:158 #4 <signal handler called> #5 0x00007f8ac10edf03 in _int_malloc () from /lib64/libc.so.6 #6 0x00007f8ac10f06b7 in malloc () from /lib64/libc.so.6 #7 0x00000000004015ba in do_the_boogie (fd=3, gp=<optimized out>) at lol.c:715 #8 0x00000000004023cc in main (argc=5, argv=<optimized out>) at lol.c:810
LOL, it is deadlocked. The signal handler (frame #4) was invoked inside a
malloc
(frame #5), and the signal handler calls free
in frame #3. Of course, the heap lock is held in frame #5 and both are in the same memory arena (see: break space), hence we are screwed.
No comments :
Post a Comment