Building ghc with DEBUG: ASSERTION FAILED: file Capability.h, line 297

Simon Marlow marlowsd at gmail.com
Tue Mar 3 10:42:33 EST 2009


Ian Lynagh wrote:
> On Sun, Jan 11, 2009 at 08:21:36PM +0100, Matthias Kilian wrote:
>> [...]
>>> If you can get this just by compiling Haddock with -debug, then it could 
>>> be a bug.  In our nightly builds we do turn on -debug for the stage2 build 
>>> and hence compile all of stage 3 with the debugging-enabled stage 2, 
>>> though.
>> It still happens, with only Haddock built with -debug
> 
> I can reproduce this. I haven't fixed it, but what's going wrong is that
> when shutting down we're setting my_task to NULL:
> 
> Old value = (Task *) 0x3befe40
> New value = (Task *) 0x0
> setMyTask (task=0x0) at Task.h:263
> 263     }
> (gdb) bt
> #0  setMyTask (task=0x0) at Task.h:263
> #1  0x000000000175dd03 in boundTaskExiting (task=0x3befe40) at Task.c:187
> #2  0x0000000001753d5a in rts_unlock (cap=0x1c66180) at RtsAPI.c:657
> #3  0x00000000017513a1 in real_main () at Main.c:114
> #4  0x0000000001751459 in main (argc=34, argv=0x7fff8c80a5f8) at Main.c:156
> 
> and then when garbage collecting we're checking that it's equal to
> cap->running_task (which is equal to its old value, 0x3befe40) at
> Capability.h line 299:
> 
>     ASSERT(cap->running_task == myTask());
> 
> #0  0x00007f00833e7ef5 in raise () from /lib/libc.so.6
> #1  0x00007f00833e9413 in abort () from /lib/libc.so.6
> #2  0x0000000001755cc0 in rtsFatalInternalErrorFn (
>     s=0x1849f50 "ASSERTION FAILED: file %s, line %u\n", ap=0x7fff8c809ff0)
>     at RtsMessages.c:164
> #3  0x0000000001755884 in barf (
>     s=0x1849f50 "ASSERTION FAILED: file %s, line %u\n") at RtsMessages.c:40
> #4  0x00000000017558de in _assertFail (filename=0x184d38e "./Capability.h", 
>     linenum=304) at RtsMessages.c:55
> #5  0x000000000176b251 in recordMutableCap (p=0x7f0082b833f0, cap=0x1c66180, 
>     gen=1) at ./Capability.h:304
> #6  0x000000000176b34c in setTSOLink (cap=0x1c66180, tso=0x7f0082b833f0, 
>     target=0x7f008308a068) at sm/Storage.c:880
> #7  0x0000000001758552 in appendToRunQueue (cap=0x1c66180, tso=0x7f008308a068)
>     at Schedule.h:188
> #8  0x0000000001759e19 in scheduleThread (cap=0x1c66180, tso=0x7f008308a068)
>     at Schedule.c:2038
> #9  0x000000000175f8fe in scheduleFinalizers (cap=0x1c66180, 
>     list=0x7f008274c030) at Weak.c:145
> #10 0x0000000001763501 in GarbageCollect (force_major_gc=rtsFalse, gc_type=0, 
>     cap=0x1c66180) at sm/GC.c:737
> #11 0x0000000001759772 in scheduleDoGC (cap=0x1c66180, task=0x0, 
>     force_major=rtsFalse) at Schedule.c:1631
> #12 0x000000000175a067 in exitScheduler (wait_foreign=rtsFalse)
>     at Schedule.c:2220
> #13 0x0000000001756111 in hs_exit_ (wait_foreign=rtsFalse) at RtsStartup.c:410
> #14 0x000000000175624e in shutdownHaskellAndExit (n=0) at RtsStartup.c:557
> #15 0x0000000001751422 in real_main () at Main.c:144
> #16 0x0000000001751459 in main (argc=34, argv=0x7fff8c80a5f8) at Main.c:156
> 
> I'd guess the reason we don't see it in GHC builds is that it only goes
> wrong with the non-threaded RTS.

I believe I've fixed this now.  Thanks for looking into it!

Cheers,
	Simon
	



More information about the Cvs-ghc mailing list