CVSROOT: /sources/dotgnu-pnet
Module name: pnetlib
Branch:
Changes by: Deryk Robosson <[EMAIL PROTECTED]> 06/05/13 06:46:08
Modified files:
DotGNU.SSL : GNUTLS.cs
Log message:
gnutls_datum had managed resources that should be freed when required
(yes, even for structs)
CVSWeb URLs:
http://cvs.savannah.gnu.org/viewcvs/dotgnu-pnet/pnetlib/DotGNU.SSL/GNUTLS.cs.diff?tr1=1.5&tr2=1.6&r1=text&r2=text
Patches:
Index: pnetlib/DotGNU.SSL/GNUTLS.cs
diff -u pnetlib/DotGNU.SSL/GNUTLS.cs:1.5 pnetlib/DotGNU.SSL/GNUTLS.cs:1.6
--- pnetlib/DotGNU.SSL/GNUTLS.cs:1.5 Sat May 13 06:25:55 2006
+++ pnetlib/DotGNU.SSL/GNUTLS.cs Sat May 13 06:46:08 2006
@@ -681,10 +681,11 @@
ref gnutls_datum key, Int type);
[StructLayout(LayoutKind.Sequential)]
- private struct gnutls_datum
+ private struct gnutls_datum : IDisposable
{
public IntPtr data;
public UInt size;
+ private bool isDisposed;
// Constructor.
public gnutls_datum(byte[] value)
@@ -694,6 +695,27 @@
size = (UInt)(value.Length);
}
+ // Finalizer.
+ // structs do not normally have finalizers, however
+ // this one has unmanaged resources that needs to be freed
+ ~gnutls_datum()
+ {
+ if(isDisposed == false)
+ {
+ Free();
+ }
+ }
+
+ // IDisposable interface because we have unmanaged resources
+ public void Dispose()
+ {
+ if(isDisposed == false)
+ {
+ Free();
+ }
+ isDisposed = true;
+ }
+
// Free the data in this object.
public void Free()
{
_______________________________________________
dotgnu-pnet-commits mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/dotgnu-pnet-commits