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

Attachment: pgp3aBa2stbSN.pgp
Description: PGP signature

_______________________________________________
ast-developers mailing list
ast-developers@lists.research.att.com
http://lists.research.att.com/mailman/listinfo/ast-developers

Reply via email to