[Raw Msg Headers][Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Problems with scheduler on Solaris
Hi,
I'm having problems with scheduler. It dumps core, but I don't know why.
It seems to be a bug in qsort(). I think this is rather unlikely, but who
knows...
#0 0x1eb00 in vtx_ctime_cmp (ap=0x5b8f4, bp=0x5b8fc) at threads.c:594
594 if ((*a)->cfp->ctime < (*b)->cfp->ctime)
(gdb) where
#0 0x1eb00 in vtx_ctime_cmp (ap=0x5b8f4, bp=0x5b8fc) at threads.c:594
#1 0xef650304 in qsort ()
#2 0x1ec44 in thread_vertex_shuffle (thr=0x67848) at threads.c:641
#3 0x1f43c in pick_next_vertex (proc=0x812f8, ok=1, justfree=0)
at threads.c:970
#4 0x1ae44 in unvertex (vp=0x789e8, justfree=0, ok=1) at update.c:303
#5 0x1b770 in vtxupdate (vp=0x789e8, index=6, ok=1) at update.c:579
#6 0x1bb50 in u_ok (vp=0x789e8, index=6, inum=52484, offset=159,
notary=0x1b196a "", message=0x0) at update.c:694
#7 0x1aa78 in update (fd=494056, diagnostic=0x1b196b "ok") at update.c:210
#8 0x1a344 in readfrom (fd=30) at transport.c:882
#9 0x19e90 in mux (timeout=245760) at transport.c:708
#10 0x14aa0 in main (argc=6, argv=0x3c000) at scheduler.c:586
(gdb) print a
$1 = (struct vertex **) 0x5b8f4
======> Note the address of a!
(gdb) up
#1 0xef650304 in qsort ()
(gdb) up
#2 0x1ec44 in thread_vertex_shuffle (thr=0x67848) at threads.c:641
641 qsort((void*)ur_arr, n, sizeof(struct vertex *), vtx_ctime_cmp);
(gdb) print &ur_arr[0]
$2 = (struct vertex **) 0x5b8f8
======> This should be expected
(gdb) print &ur_arr[-1]
$3 = (struct vertex **) 0x5b8f4
======> Somehow qsort calls the compare function with a negative index.
======> This should not happen
I solved this by using the qsort from glibc. The cores vanished...
Perhaps someone knows an answer to this puzzle....
Greetings, Swen