Re: [Vm-dev] Fwd: Need help with Alien, unexpected function return value

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

Re: [Vm-dev] Fwd: Need help with Alien, unexpected function return value

Joachim Geidel
Steve,

>>>     result := (Alien newGC: 4) pointer.
>>>     functionPointer
>>>         primFFICallResult: result
>>>         with: self asJNIParameter.
>>>     ^result signedIntAt: 1
[snip]
> When you use a pointer alien (which has a size field of zero) as the
> return result of a function call, the alien code expects the result from
> the alien to be a pointer to some area of memory and replaces the
> address field of the result alien with the result returned by the
> function call. You're lucky your method returned any result at all
> rather than crashing with an access violation - you are dereferencing
> whatever sits at 0x00010006.
[snip]
>>>     result := (Alien newC: 4).
>>>     functionPointer
>>>         primFFICallResult: result pointer
>>>         with: self asJNIParameter.
>>>     ^result signedIntAt: 1
[snip]      
> This time you are returning the signed int at the block of memory
> allocated by the newC: call. The memory gets zeroed before use, which is
> why you get a zero. Because you used "result pointer" in the alien call
> the alien code again replaces the pointer alien's address with the
> result. This time though, you don't have a reference to the pointer
> alien, so the result is effectively discarded.

Thanks a lot for the explanation!

Am 16.05.10 03:58 schrieb Steve Rees:
> Try the following
>
> result := (Alien new: 4).
> functionPointer
> primFFICallResult: result
> with: self asJNIParameter.
> ^result signedIntAt: 1

Yes, that's it. I get the expected result now.

I'll have to inspect the rest of my (ab)use of Aliens now, but that
shouldn't take long. After that I'll have to find out where I should
explicitly free Aliens and where the garbage collector will do that for me.
I am sure I have built in some nice memory leaks. :-)

Thanks again!
Joachim



_______________________________________________
Pharo-users mailing list
[hidden email]
http://lists.gforge.inria.fr/cgi-bin/mailman/listinfo/pharo-users