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
+ }
}