THRIFT-1412 Thrift Transport classes should manage the lifetime of objects implementing IDisposable by implementing IDisposable themselves
Patch: Joshua Garvin

git-svn-id: https://svn.apache.org/repos/asf/thrift/trunk@1325013 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/lib/csharp/src/Transport/THttpClient.cs b/lib/csharp/src/Transport/THttpClient.cs
index 717907c..106f840 100644
--- a/lib/csharp/src/Transport/THttpClient.cs
+++ b/lib/csharp/src/Transport/THttpClient.cs
@@ -27,7 +27,7 @@
 
 namespace Thrift.Transport
 {
-	public class THttpClient : TTransport
+	public class THttpClient : TTransport, IDisposable
 	{
 		private readonly Uri uri;
 		private Stream inputStream;
@@ -142,9 +142,11 @@
 				byte[] data = outputStream.ToArray();
 				connection.ContentLength = data.Length;
 
-				Stream requestStream = connection.GetRequestStream();
-				requestStream.Write(data, 0, data.Length);
-				inputStream = connection.GetResponse().GetResponseStream();
+				using (Stream requestStream = connection.GetRequestStream())
+				{
+					requestStream.Write(data, 0, data.Length);
+					inputStream = connection.GetResponse().GetResponseStream();
+				}
 			}
 			catch (IOException iox)
 			{
@@ -156,7 +158,7 @@
 			}
 		}
 #endif
-        private HttpWebRequest CreateRequest()
+				private HttpWebRequest CreateRequest()
 		{
 			HttpWebRequest connection = (HttpWebRequest)WebRequest.Create(uri);
 
@@ -356,5 +358,24 @@
         }
 
 #endif
-    }
+#region " IDisposable Support "
+		private bool _IsDisposed;
+
+		// IDisposable
+		protected override void Dispose(bool disposing)
+		{
+			if (!_IsDisposed)
+			{
+				if (disposing)
+				{
+					if (inputStream != null)
+						inputStream.Dispose();
+					if (outputStream != null)
+						outputStream.Dispose();
+				}
+			}
+			_IsDisposed = true;
+		}
+#endregion
+	}
 }