[Haskell-beginners] Strange Failure in extern code via FFI

Nathan Hüsken nathan.huesken at posteo.de
Fri Sep 13 13:05:36 CEST 2013


Hey,

I have C++ code which works perfectly when compiled in C++ program. Now 
I want to call this C++ code from haskell via FFI. When doing so, I get 
this error in a HUnit test program:

test-rf: malloc.c:2369: sysmalloc: Assertion `(old_top == (((mbinptr) 
(((char *) &((av)->bins[((1) - 1) * 2])) - __builtin_offsetof (struct 
malloc_chunk, fd)))) && old_size == 0) || ((unsigned long) (old_size) >= 
(unsigned long)((((__builtin_offsetof (struct malloc_chunk, 
fd_nextsize))+((2 * (sizeof(size_t))) - 1)) & ~((2 * (sizeof(size_t))) - 
1))) && ((old_top)->size & 0x1) && ((unsigned long)old_end & pagemask) 
== 0)' failed.

Something wrong with memory allocation I guess. The code I am running is 
complex and not mine. But I ran gdb over the problem and the error 
occurs at this code:

data = alloc_.allocate(capacity);

gdb tells me, that capacity==2, so it does not seem to be an out of 
memory error. Also about alloc_, gdb tells me:

(gdb) p alloc_
$3 = {<__gnu_cxx::new_allocator<unsigned int>> = {<No data fields>}, <No 
data fields>}

The stack frames above the shown code are:

#0  0x00007ffff69a8037 in raise () from /lib/x86_64-linux-gnu/libc.so.6
#1  0x00007ffff69ab698 in abort () from /lib/x86_64-linux-gnu/libc.so.6
#2  0x00007ffff69efb7a in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#3  0x00007ffff69f306c in ?? () from /lib/x86_64-linux-gnu/libc.so.6
#4  0x00007ffff69f4580 in malloc () from /lib/x86_64-linux-gnu/libc.so.6
#5  0x00007ffff7b3666d in operator new(unsigned long) () from 
/usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6  0x000000000040dbd0 in allocate (__n=2, this=0x7fffffff9a48) at 
/usr/include/c++/4.7/ext/new_allocator.h:94

So ... it seems to be something with the new_allocator ...
Maybe I am doing something different than in the C++ code, but I do not 
know what so I am suspecting it has something to do with the haskell FFI.

Any Ideas?
Thanks!
Nathan



More information about the Beginners mailing list