On Thu, Oct 28, 2010 at 12:38:17PM +0200, Matthias Bolte wrote: > StringToHGlobalAnsi returns a pointer to unmanaged memory that > must be freed using FreeHGlobal. > > When the setter is called twice the strdup'ed unmanaged string > from the first call leaks. Free it before assigning it again. [...] > + > + // TODO : this is a temporary workaround for virConnectOpenAuth callback, this should be removed > + [DllImport("msvcrt.dll", EntryPoint = "free", CallingConvention = CallingConvention.Cdecl)] > + public static extern void Free(IntPtr ptr); > } [...] > + IntPtr tmp = Marshal.StringToHGlobalAnsi(value); > + > + NativeFunctions.Free(result); > + result = NativeFunctions.StrDup(tmp); > resultlen = (uint)value.Length; > + > + Marshal.FreeHGlobal(tmp); This raises 2 questions, how temporary is 'temporary' ;-) ? And I assume the client code don't need to do similar things, that's just the bindings, right ? Daniel -- Daniel Veillard | libxml Gnome XML XSLT toolkit http://xmlsoft.org/ daniel@xxxxxxxxxxxx | Rpmfind RPM search engine http://rpmfind.net/ http://veillard.com/ | virtualization library http://libvirt.org/ -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list