On Wed, Jul 09, 2014 at 12:36:07PM +0200, Werner Fink wrote: > Hi, > > even with _AST_std_malloc==0 and _map_malloc==1 I see sometimes that > the test suite hangs for ever in signal.sh. After attaching the gdb > to such a hanging ksh process I can identify that this happens in > the signal handler sh_fault() if the Siginfo structure is allocated. > The back trace shows that the ksh hanging at last in a nanosleep() > call within tvsleep() called below src/lib/libast/vmalloc/
Just like this (gdb) up #1 0x00000000004c6a7d in tvsleep (tv=<optimized out>, rv=0x0) at /usr/src/packages/BUILD/ksh93/src/lib/libast/tm/tvsleep.c:64 64 if ((r = nanosleep(&stv, &srv)) && errno == EINTR && rv) (gdb) #2 0x00000000004f65a9 in asorelax (nsec=<optimized out>) at /usr/src/packages/BUILD/ksh93/src/lib/libast/aso/asorelax.c:46 46 return tvsleep(&tv, 0); (gdb) #3 0x00000000004f653a in asolock (lock=0x7da858 <_Vmextern+120>, key=1241319115, type=<optimized out>) at /usr/src/packages/BUILD/ksh93/src/lib/libast/aso/asolock.c:40 40 { for (;; asospinrest()) (gdb) #4 0x00000000004fb30c in safebrkmem (vm=0x7da5c0 <_Vmheap>, caddr=0x0, csize=0, nsize=4194304, disc=<optimized out>) at /usr/src/packages/BUILD/ksh93/src/lib/libast/vmalloc/vmdcsystem.c:206 206 asolock(&_Vmsbrklock, key, ASO_LOCK); (gdb) #5 0x00000000004ff34e in _vmsegalloc (vm=0x7da5c0 <_Vmheap>, blk=<optimized out>, size=16384, type=1) at /usr/src/packages/BUILD/ksh93/src/lib/libast/vmalloc/vmsegment.c:377 377 if(!(base = (Vmuchar_t*)(*disc->memoryf)(vm, NIL(Void_t*), 0, segsz, disc)) ) (gdb) #6 0x00000000004f9545 in bestpackget (vm=0x7fff00b146a0, ppos=<optimized out>, tid=1241319115) at /usr/src/packages/BUILD/ksh93/src/lib/libast/vmalloc/vmbest.c:295 295 if(!(blk = (*_Vmsegalloc)(vm, NIL(Block_t*), sizeof(Pack_t)+EXTZ, VM_SEGEXTEND)) ) (gdb) #7 0x00000000004f9840 in bestalloc (vm=0x7da5c0 <_Vmheap>, size=144, local=<optimized out>) at /usr/src/packages/BUILD/ksh93/src/lib/libast/vmalloc/vmbest.c:762 762 } while (!(pk = bestpackget(vm, ppos, tid))); (gdb) #8 0x00000000004f7a29 in _ast_malloc (size=144) at /usr/src/packages/BUILD/ksh93/src/lib/libast/vmalloc/malloc.c:770 770 addr = (*Vmregion->meth.allocf)(Vmregion, size, 0); (gdb) #9 0x00000000004161a5 in set_trapinfo (info=<optimized out>, sig=<optimized out>, shp=<optimized out>) at /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/fault.c:89 89 ip = malloc(sizeof(struct Siginfo)); (gdb) #10 sh_fault (sig=36, info=0x7fff00b14fc0, context=<optimized out>) at /usr/src/packages/BUILD/ksh93/src/cmd/ksh93/sh/fault.c:210 210 set_trapinfo(shp,sig,info); > > In other words even the libast variant of memory allocation is not > reentrant. -- "Having a smoking section in a restaurant is like having a peeing section in a swimming pool." -- Edward Burr
pgp3aBa2stbSN.pgp
Description: PGP signature
_______________________________________________ ast-developers mailing list ast-developers@lists.research.att.com http://lists.research.att.com/mailman/listinfo/ast-developers