[OpenAFS-devel] *** glibc detected *** free(): invalid pointer: 0xb7e0a010 ***

Harald Barth haba@pdc.kth.se
Thu, 10 Mar 2005 16:39:25 +0100 (MET)


I'm running bosserver 1.3.79 built on fc3 against

kelp# ldd /usr/openafs/sbin/bosserver 
        linux-gate.so.1 =>  (0xffffe000)
        libresolv.so.2 => /lib/libresolv.so.2 (0x49d64000)
        libc.so.6 => /lib/tls/libc.so.6 (0x49be7000)
        /lib/ld-linux.so.2 (0x49bce000)
kelp# ls -l /lib/tls/libc.so.6
lrwxrwxrwx  1 root root 13 Mar  9 17:58 /lib/tls/libc.so.6 -> libc-2.3.4.so
kelp# 

When I do a bos restart kelp -local -all on my bosserver started in gdb

kelp# gdb /usr/src/redhat/BUILD/openafs-1.3.79/src/bozo/bosserver 

(gdb) run -nofork

Loaded system supplied DSO at 0xffffe000
*** glibc detected *** free(): invalid pointer: 0xb7e0a010 ***

Program received signal SIGABRT, Aborted.
0xffffe410 in __kernel_vsyscall ()
(gdb) bt
#0  0xffffe410 in __kernel_vsyscall ()
#1  0x49c0e955 in raise () from /lib/tls/libc.so.6
#2  0x49c10319 in abort () from /lib/tls/libc.so.6
#3  0x49c41f9a in __libc_message () from /lib/tls/libc.so.6
#4  0x49c48528 in _int_free () from /lib/tls/libc.so.6
#5  0x49c48afa in free () from /lib/tls/libc.so.6
#6  0x08062585 in Free_PCB (pid=0x49d0cff4) at ./lwp.c:1002
#7  0x08062c81 in LWP_CreateProcess (ep=0x804c378 <bnode_SoftInt>, 
    stacksize=-1210015728, priority=2, parm=0x11, 
    name=0x8075a28 "SignalHandler", pid=0x0) at ./lwp.c:857
#8  0x08063349 in IOMGR (dummy=0x0) at ./iomgr.c:752
#9  0x08062858 in Create_Process_Part2 () at ./lwp.c:783
#10 0x08062fd9 in savecontext (ep=0, savearea=0x49d0e800, 
    sp=0x14 <Address 0x14 out of bounds>) at ./process.c:197
#11 0x00000001 in ?? ()
(gdb) 
(gdb) down
#6  0x08062585 in Free_PCB (pid=0x49d0cff4) at ./lwp.c:1002
1002            free(pid->stack);
(gdb) list
997         Debug(4, ("Entered Free_PCB"));
998         if (pid->stack != NULL) {
999             Debug(0,
1000                  ("HWM stack usage: %d, [PCB at 0x%x]",
1001                   Stack_Used(pid->stack, pid->stacksize), pid));
1002            free(pid->stack);
1003        }
1004        if (pid->eventlist != NULL)
1005            free(pid->eventlist);
1006        free(pid);
(gdb) print *pid
$1 = {name = "<ÍÐI\226»¿I\000\000\000\000ÀZÎIP«ÄI`¨ÄI\220±ÄI0®ÄI", 
  rc = 1237174192, status = 112 'p', blockflag = -118 '\212', 
  eventlistsize = -60 'Ä', padding = 73 'I', eventlist = 0x0, eventcnt = 0, 
  wakevent = 895, waitcnt = 64, priority = 34, misc = 0x0, stack = 0x0, 
  stacksize = 0, stackcheck = 0, ep = 0x3, 
  parm = 0x991539b1 <Address 0x991539b1 out of bounds>, context = {
    topstack = 0x16a5bce3 <Address 0x16a5bce3 out of bounds>, setjmp_buffer = {
      {__jmpbuf = {1735697613, 1040273694, 1313901226, 1627687941, -179304937, 
          -2073333483}, __mask_was_saved = 1780058412, __saved_mask = {
          __val = {2305464239, 3678992694, 344556628, 939512070, 3045851036, 
            1507946756, 3482421833, 154635395, 1388815473, 2368290473, 
            525320961, 3285938622, 968117788, 4171517689, 1284210865, 
            435012392, 2277460957, 3383902437, 3924708123, 1132637927, 
            1398500161, 4089365978, 1, 3, 1, 2000, 63, 1, 1, 255, 2, 
            4294967295}}}}}, lwp_rused = 8, lwp_rlist = {{tag = 0, 
      value = 0x0}, {tag = 0, value = 0x0}, {tag = 0, 
      value = 0x3 <Address 0x3 out of bounds>}, {tag = 0, value = 0x0}}, 
  next = 0x0, prev = 0x0, level = 0, iomgrRequest = 0x0, index = 0}
(gdb) 

So, what should I do? Use LD_ASSUME_KERNEL with some 2.4.? value to
force some other thread stuff? Some other creative means of debugging?

Harald.

PS: I'm not a big fan of this OS anyway, but if FreeBSD 5.3 "performs"
with 25MB/sec on RAID and with the same 25MB/sec on a 70MB/sec RAED,
what do you do?