
On 23 June 2006 17:43, Caio Marcelo wrote:
On 6/23/06, Simon Marlow
wrote: What did I do wrong?
Did you changed the Judy/Map.hs code to not use Dummy (see below)? The code I commited is the version with the workaround.
Anyway, I'm going to darcs pull and recompile GHC to check if the behaviour changes.
-----------8<------------ Index: Judy/Map.hs =================================================================== --- Judy/Map.hs (revisão 10752) +++ Judy/Map.hs (cópia de trabalho) @@ -56,7 +56,8 @@ class Dummy a instance Dummy a
-instance Dummy a => Refeable a where +--instance Dummy a => Refeable a where +instance Refeable a where toRef a = do a' <- newStablePtr a return (ptrToWordPtr (castStablePtrToPtr a')) ---------->8-------------
Ok, I reproduced it. I think this may be a bug in your code, but I'm not completely sure. Compiling the program with -debug turns the crash into an assertion failure. Furthermore, running the program with +RTS -DS, which causes all free memory to be filled with 0xaaaaaaaa, turns the crash into this: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 47963533074768 (LWP 15726)] 0x0000003fa1e75b30 in memcpy () from /lib64/libc.so.6 (gdb) where #0 0x0000003fa1e75b30 in memcpy () from /lib64/libc.so.6 #1 0x000000000045329e in JudyHSIterFirst (PArray=0x0, PPIter=Variable "PPIter" is not available. ) at JudyHS.c:983 #2 0x000000000040e2b1 in s2KX_info () #3 0x000000000066fb90 in ?? () #4 0x00002b9f616828d0 in ?? () #5 0x0000000000000000 in ?? () which looks suspicious. Delving a little further: (gdb) up #1 0x000000000045329e in JudyHSIterFirst (PArray=0x0, PPIter=Variable "PPIter" is not available. ) at JudyHS.c:983 983 memcpy(PIter->hsi_String, String, Length); (gdb) p *PIter $1 = {hsi_Alloc = 32, hsi_MaxLength = 0, hsi_Length = 12297829382473034410, hsi_Hash = 0, hsi_String = "\000\000\000\000\000\000\000"} (gdb) p String $2 = (uint8_t *) 0xaaaaaaaaaaaaaaaa
(gdb) p Length $3 = 12297829382473034410 So it looks like you're passing some free memory to a foreign function, perhaps. Is this any help? Cheers, Simon