THRIFT-2303 TBufferredTransport not properly closing underlying transport
authorJens Geyer <jensg@apache.org>
Thu, 2 Jan 2014 21:58:43 +0000 (22:58 +0100)
committerJens Geyer <jensg@apache.org>
Thu, 2 Jan 2014 21:58:43 +0000 (22:58 +0100)
Patch: Alex Ausch

lib/csharp/src/Transport/TBufferedTransport.cs
lib/csharp/test/ThriftTest/TestClient.cs

index 14b5db0..6cb0457 100644 (file)
@@ -54,6 +54,18 @@ namespace Thrift.Transport
                        }
                }
 
+               private void CloseBuffers()
+               {
+                       if (inputBuffer != null && inputBuffer.CanRead)
+                       {
+                               inputBuffer.Close();
+                       }
+                       if (outputBuffer != null && outputBuffer.CanWrite)
+                       {
+                               outputBuffer.Close();
+                       }
+               }
+
                public TTransport UnderlyingTransport
                {
                        get { return transport; }
@@ -72,14 +84,8 @@ namespace Thrift.Transport
 
                public override void Close()
                {
-                       if (inputBuffer != null && inputBuffer.CanRead)
-                       {
-                               inputBuffer.Close();
-                       }
-                       if (outputBuffer != null && outputBuffer.CanWrite)
-                       {
-                               outputBuffer.Close();
-                       }
+                       CloseBuffers();
+                       transport.Close();
                }
 
                public override int Read(byte[] buf, int off, int len)
index fe21f41..c7b81b4 100644 (file)
@@ -99,7 +99,10 @@ namespace Test
                                                        trans = new TBufferedTransport(trans as TStreamTransport);
                                                if (framed)
                                                        trans = new TFramedTransport(trans);
-                                                       
+                                               
+                                               //ensure proper open/close of transport
+                                               trans.Open();
+                                               trans.Close();
                                                t.Start(trans);
                                        }
                                        else