summary refs log tree commit diff
path: root/crypto/src/util/zlib/ZOutputStream.cs
diff options
context:
space:
mode:
Diffstat (limited to 'crypto/src/util/zlib/ZOutputStream.cs')
-rw-r--r--crypto/src/util/zlib/ZOutputStream.cs60
1 files changed, 40 insertions, 20 deletions
diff --git a/crypto/src/util/zlib/ZOutputStream.cs b/crypto/src/util/zlib/ZOutputStream.cs
index 1d2ead7b3..d9f005f69 100644
--- a/crypto/src/util/zlib/ZOutputStream.cs
+++ b/crypto/src/util/zlib/ZOutputStream.cs
@@ -95,32 +95,52 @@ namespace Org.BouncyCastle.Utilities.Zlib
         public sealed override bool CanSeek { get { return false; } }
         public sealed override bool CanWrite { get { return !closed; } }
 
+#if PORTABLE
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing)
+            {
+			    if (closed)
+				    return;
+
+                DoClose();
+            }
+            base.Dispose(disposing);
+        }
+#else
 		public override void Close()
 		{
-			if (this.closed)
+			if (closed)
 				return;
 
-			try
-			{
-				try
-				{
-					Finish();
-				}
-				catch (IOException)
-				{
-					// Ignore
-				}
-			}
-			finally
-			{
-				this.closed = true;
-				End();
-				output.Close();
-				output = null;
-			}
+            DoClose();
+            base.Close();
 		}
+#endif
+
+        private void DoClose()
+        {
+            try
+            {
+                try
+                {
+                    Finish();
+                }
+                catch (IOException)
+                {
+                    // Ignore
+                }
+            }
+            finally
+            {
+                this.closed = true;
+                End();
+                Platform.Dispose(output);
+                output = null;
+            }
+        }
 
-		public virtual void End()
+        public virtual void End()
 		{
 			if (z == null)
 				return;