Biographical profiling (-hb) crashes, other profiling modes have truncated output
I have a (non-trivial) threaded program which always crashes with a Bus Error when running with +RTS -hb. gdb didn't provide much useful information. Valgrind seems to have some issues with Haskell programs, but here is what it spits out:
jacky: ioManagerDie: write: Bad file descriptor ==56255== Invalid read of size 4 ==56255== at 0x1AAC4BD: LdvCensusForDead (in ./jacky) ==56255== by 0x1ABBAAC: scheduleDoGC (in ./jacky) ==56255== by 0x1ABBEBE: exitScheduler (in ./jacky) ==56255== Address 0x9c88090 is 0 bytes inside a block of size 8 free'd ==56255== at 0x3E7511F: realloc (vg_replace_malloc.c:525) ==56255== by 0x1AB9E77: stgReallocBytes (in ./jacky) ==56255== ==56255== Invalid read of size 4 ==56255== at 0x1AAC4BD: LdvCensusForDead (in ./jacky) ==56255== Address 0x9c88090 is 0 bytes inside a block of size 8 free'd ==56255== at 0x3E7511F: realloc (vg_replace_malloc.c:525) ==56255== by 0x1AB9E77: stgReallocBytes (in ./jacky)
56251== Invalid read of size 4
56251== at 0x1AAC4BD: LdvCensusForDead (in ./jacky)
56251== by 0x1ABBAAC: scheduleDoGC (in ./jacky)
56251== by 0x1ABBEBE: exitScheduler (in ./jacky)
56251== Address 0x9c88090 is 0 bytes inside a block of size 8 free'd
56251== at 0x3E7511F: realloc (vg_replace_malloc.c:525)
56251== by 0x1AB9E77: stgReallocBytes (in ./jacky)
56251==
56251== Invalid read of size 4
56251== at 0x1AAC4BD: LdvCensusForDead (in ./jacky)
56251== Address 0x9c88090 is 0 bytes inside a block of size 8 free'd
56251== at 0x3E7511F: realloc (vg_replace_malloc.c:525)
56251== by 0x1AB9E77: stgReallocBytes (in ./jacky)
running with +'RTS -hb -s' gets us this from valgrind:
jacky(56272,0xa0707540) malloc: *** error for object 0x4c05684: incorrect checksum for freed object - object was probably modified after being freed.
- ** set a breakpoint in malloc_error_break to debug
jacky(56272,0xa0707540) malloc: *** error for object 0x4c03894: incorrect checksum for freed object - object was probably modified after being freed.
- ..
The program seems to work just fine when running without profiling. Profiling modes other than -hb haven't crashed so far, but it seems the output is truncated. Cost-center profiling seems to work the most reliable, but all the other memory profiling options only output data for the first few seconds, even when the program runs for minutes.
I haven't managed to narrow this one down further in the program, please let me know if this is already helpful or if I need to provide more information.
I also attached the OS X crash report file.
Trac metadata
| Trac field | Value |
|---|---|
| Version | 7.6.3 |
| Type | Bug |
| TypeOfFailure | OtherFailure |
| Priority | normal |
| Resolution | Unresolved |
| Component | Runtime System |
| Test case | |
| Differential revisions | |
| BlockedBy | |
| Related | |
| Blocking | |
| CC | simonmar |
| Operating system | |
| Architecture |