[Mono-list] issue with pinvoke & memory leak

Chris Turchin chris@turchin.net
Wed, 2 Jun 2004 04:30:01 -0700 (PDT)


i have the following sitution (not directly mono related but maybe interesting
regardless since a lot of pinvoke is going on here) that I do not know how to
handle cleanly:

i have been playing with  a wrapper for an image library with the following

private static extern FIBITMAP FreeImage_Rescale(FIBITMAP dib, int dst_width,
					int dst_height, FilterOption filter);

I had implemented it like this:

public FreeImage Resample(int newwidth, int newheight,
				FilterOption filter)

which works fine with something like:

FreeImage img2 = img.Resample(100,100,FilterOption.BILINEAR);

but when I do:

img = img.Resample(100,100,FilterOption.BILINEAR);

then the img object is 'replaced' but a I have a big memory leak, since the
Dispose() method which handles the cleanup of unmanaged resources (the img
object has a pointer to the unmanaged image data which is normally released when
the object is disposed) is never called.

Can someone give me a tip how to handle this in a way that ensures that the old
data from img is disposed in the second case above? Actaully, would this same
issue be a problem for all IDisposable objects in managed code (maybe I am not
allowed to do this at all with IDisposable objects) or is this unique to the
managed/unmanaged code in question here?

Thanks for any feedback!