Will take a look. Not sure what it may not be liking. Code is very basic. Literally allocates 16mb chunk then frees it (each object has one) code works fine in windows with same calls. Will debug it on Sunday.<span></span><br>
<br>On Friday, August 24, 2012, Jonathan Pryor  wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">On Aug 23, 2012, at 2:35 AM, Greg Young <<a href="javascript:;" onclick="_e(event, 'cvml', 'gregoryyoung1@gmail.com')">gregoryyoung1@gmail.com</a>> wrote:<br>

> We are allocating and releasing unmanaged memory with marshal.allochglobal. In mono we are getting the following failure (no failures under clr).<br>
><br>
> Any ideas?<br>
<br>
That's not a mono error, that's a glibc assert (and thus cannot become an exception, ever):<br>
<br>
> part from team city logs:<br>
> [20:55:52][Step 2/2] mono: malloc.c:2451: 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.<br>

<br>
Very probably coming from:<br>
<br>
        <a href="http://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=0f1796c9134ffef289ec31fb1cd538f3a9490ae1;hb=HEAD#l2361" target="_blank">http://sourceware.org/git/?p=glibc.git;a=blob;f=malloc/malloc.c;h=0f1796c9134ffef289ec31fb1cd538f3a9490ae1;hb=HEAD#l2361</a><br>

           /*<br>
              If not the first time through, we require old_size to be<br>
              at least MINSIZE and to have prev_inuse set.<br>
           */<br>
<br>
           assert((old_top == initial_top(av) && old_size == 0) ||<br>
                  ((unsigned long) (old_size) >= MINSIZE &&<br>
                   prev_inuse(old_top) &&<br>
                   ((unsigned long)old_end & pagemask) == 0));<br>
<br>
The line number is different, but it's the same file and the assert looks close enough (considering macro expansion, etc.).<br>
<br>
In short, malloc(3) doesn't like you or something that you're doing. I would suggest setting the MALLOC_CHECK_ environment variable (see the malloc(3) man page), and/or "porting" your malloc use to C to verify that it also crashes there.<br>

<br>
 - Jon<br>
<br>
</blockquote><br><br>-- <br>Le doute n'est pas une condition agréable, mais la certitude est absurde.<br>