Re: nlffi memory problems on power ppc

brian <BRIAND-/[email protected]> Wed, 11 Apr 2007 07:14:45 -0700
Newsgroups gmane.comp.lang.sml.smlnj
Message-ID <[email protected]>
Thanks very much for looking into this !  I'm glad it's not just me.

Unfortunately it's very hard to get anything done in C without  
allocating memory.

I think that I've been able to create bindings to malloc/free as a  
work around, but there is some problem with doing that which I can't  
seem to remember.  Maybe this is an additional clue.

I'm working on a X3D/vrml thing right now, and then I'm going to get  
back to the X/opengl interface where this is causing lots of problems  
because of all those event structures I have to allocate.

Interestingly, any library, fftw is a good example, which provides  
it's own memory allocation, does not seem to cause any problems ?!

"Heisenbug"  - good one - I haven't heard that before.

Brian

P.S. Naturally I'm happy to help out with this, just let me know what  
I can do.  I did actually look through the low-level nlffi code and  
my untrained eye could not discern anything which looked like a  
potential problem.


On Apr 10, 2007, at 9:49 PM, Matthias Blume wrote:

> Hi Brian,
>
> I tried to experiment a bit with this code, and it is quite
> frustrating... :-(
>
> Indeed, I can reproduce your problem on my G5 using the code you  
> posted.
> However, adding a bit of instrumentation seems to make the problem
> go away.  In particular, I added a routine for printing the contents
> of a C array. Putting an invocation of this routine any place where it
> makes sense makes the problem completely vanish.
>
> In other words, this looks more and more like a "Heisenbug".  Right
> now I don't have a good guess at what's causing this.  I'll keep
> looking.
>
> Matthias
>
>
> On Mar 8, 2007, at 12:10 AM, brian wrote:
>
>> OK.  I have a reasonably coherent example and a specific set of
>> failure conditions, so perhaps someone can tell me what's wrong.
>>
>> I should preface this with some info:
>>
>> Mac Power PC G5
>> Standard ML of New Jersey v110.60 [built: Thu Nov  9 15:44:30 2006]
>>
>> Here's the test code:
>>
>> fun memtest() =
>>      let fun set(p, i, x) = C.Set.double (C.Ptr.|*| (C.Ptr.|+| (p,
>> i)), x)
>>          fun fromArray(values) =
>>              let val n = Array.length(values)
>>                  val m = C.alloc C.T.double (Word.fromInt n)
>>                  val _ = Array.appi (fn (i, x) => set(m, i, x))  
>> values
>>              in
>>                  (* return a read-write version of the pointer *)
>>                  C.Ptr.rw m
>>              end
>>          val a1 = Array.fromList([0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
>>          val a2 = Array.fromList([0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0])
>>          val b1 = fromArray(a1)
>>          (* val b2 = fromArray(a2) *)
>>      in
>>          C.free b1;
>>          (* C.free b2; *)
>>          ()
>>      end
>>
>> The test code as is WORKS.
>> If the "val b2 = ..." line is uncommented, then the test code gives
>> me a bus error.
>> If the "C.free b2" line is uncommented, then the code gives me a
>> segmentation fault.
>>
>> Thanks
>>
>> Brian
>>
>>
>> --------------------------------------------------------------------- 
>> -
>> ---
>> Take Surveys. Earn Cash. Influence the Future of IT
>> Join SourceForge.net's Techsay panel and you'll get the chance to
>> share your
>> opinions on IT & business topics through brief surveys-and earn cash
>> http://www.techsay.com/default.php?
>> page=join.php&p=sourceforge&CID=DEVDEV
>> _______________________________________________
>> Smlnj-list mailing list
>> [email protected]
>> https://lists.sourceforge.net/lists/listinfo/smlnj-list
>>
>
>
> ---------------------------------------------------------------------- 
> ---
> Take Surveys. Earn Cash. Influence the Future of IT
> Join SourceForge.net's Techsay panel and you'll get the chance to  
> share your
> opinions on IT & business topics through brief surveys-and earn cash
> http://www.techsay.com/default.php? 
> page=join.php&p=sourceforge&CID=DEVDEV
> _______________________________________________
> Smlnj-list mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/smlnj-list


-------------------------------------------------------------------------
Take Surveys. Earn Cash. Influence the Future of IT
Join SourceForge.net's Techsay panel and you'll get the chance to share your
opinions on IT & business topics through brief surveys-and earn cash
http://www.techsay.com/default.php?page=join.php&p=sourceforge&CID=DEVDEV