summaryrefslogtreecommitdiff
path: root/lib/csharp
diff options
context:
space:
mode:
authorJens Geyer <jensg@apache.org>2013-06-25 22:21:29 +0200
committerJens Geyer <jensg@apache.org>2013-06-25 22:21:29 +0200
commit102bca47f754d9c9ed6ce341c7f8f106bd2719d7 (patch)
treec886def659d4c122b58681c6f41299d89e97f1f0 /lib/csharp
parent809544747834a3a28e7cc9c6b93300306e4d605e (diff)
downloadthrift-102bca47f754d9c9ed6ce341c7f8f106bd2719d7.tar.gz
THRIFT-2032 C# client leaks sockets/handles
Patch: Jens Geyer
Diffstat (limited to 'lib/csharp')
-rw-r--r--lib/csharp/src/Protocol/TProtocol.cs25
-rw-r--r--lib/csharp/src/Transport/TServerSocket.cs78
2 files changed, 63 insertions, 40 deletions
diff --git a/lib/csharp/src/Protocol/TProtocol.cs b/lib/csharp/src/Protocol/TProtocol.cs
index ea3762c27..70920d47b 100644
--- a/lib/csharp/src/Protocol/TProtocol.cs
+++ b/lib/csharp/src/Protocol/TProtocol.cs
@@ -27,7 +27,7 @@ using Thrift.Transport;
namespace Thrift.Protocol
{
- public abstract class TProtocol
+ public abstract class TProtocol : IDisposable
{
protected TTransport trans;
@@ -41,6 +41,29 @@ namespace Thrift.Protocol
get { return trans; }
}
+ #region " IDisposable Support "
+ private bool _IsDisposed;
+
+ // IDisposable
+ public void Dispose()
+ {
+ Dispose(true);
+ }
+
+ protected virtual void Dispose(bool disposing)
+ {
+ if (!_IsDisposed)
+ {
+ if (disposing)
+ {
+ if (trans is IDisposable)
+ (trans as IDisposable).Dispose();
+ }
+ }
+ _IsDisposed = true;
+ }
+ #endregion
+
public abstract void WriteMessageBegin(TMessage message);
public abstract void WriteMessageEnd();
public abstract void WriteStructBegin(TStruct struc);
diff --git a/lib/csharp/src/Transport/TServerSocket.cs b/lib/csharp/src/Transport/TServerSocket.cs
index 1ad3bd891..eefa4f976 100644
--- a/lib/csharp/src/Transport/TServerSocket.cs
+++ b/lib/csharp/src/Transport/TServerSocket.cs
@@ -116,48 +116,48 @@ namespace Thrift.Transport
}
}
- protected override TTransport AcceptImpl()
- {
- if (server == null)
- {
- throw new TTransportException(TTransportException.ExceptionType.NotOpen, "No underlying server socket.");
- }
- try
- {
- TcpClient result = server.AcceptTcpClient();
- TSocket result2 = new TSocket(result);
- try
- {
- result2 = new TSocket(result);
- result2.Timeout = clientTimeout;
- if (useBufferedSockets)
- {
- TBufferedTransport result3 = new TBufferedTransport(result2);
- return result3;
- }
- else
- {
- return result2;
- }
- }
- catch (System.Exception)
+ protected override TTransport AcceptImpl()
{
- // If a TSocket was successfully created, then let
- // it do proper cleanup of the TcpClient object.
- if (result2 != null)
- result2.Dispose();
- else // Otherwise, clean it up ourselves.
- ((IDisposable)result).Dispose();
- throw;
+ if (server == null)
+ {
+ throw new TTransportException(TTransportException.ExceptionType.NotOpen, "No underlying server socket.");
+ }
+ try
+ {
+ TSocket result2 = null;
+ TcpClient result = server.AcceptTcpClient();
+ try
+ {
+ result2 = new TSocket(result);
+ result2.Timeout = clientTimeout;
+ if (useBufferedSockets)
+ {
+ TBufferedTransport result3 = new TBufferedTransport(result2);
+ return result3;
+ }
+ else
+ {
+ return result2;
+ }
+ }
+ catch (System.Exception)
+ {
+ // If a TSocket was successfully created, then let
+ // it do proper cleanup of the TcpClient object.
+ if (result2 != null)
+ result2.Dispose();
+ else // Otherwise, clean it up ourselves.
+ ((IDisposable)result).Dispose();
+ throw;
+ }
+ }
+ catch (Exception ex)
+ {
+ throw new TTransportException(ex.ToString());
+ }
}
- }
- catch (Exception ex)
- {
- throw new TTransportException(ex.ToString());
- }
- }
- public override void Close()
+ public override void Close()
{
if (server != null)
{