diff options
author | Benoit Foucher <benoit@zeroc.com> | 2015-08-11 18:43:28 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2015-08-11 18:43:28 +0200 |
commit | d6c5a5a52310ea05205a599709990bf6bee0499a (patch) | |
tree | b18147eb215de7484e97fb5afe789cbf3ec95110 /csharp/src | |
parent | Add SDK prefix to WinRT builds (diff) | |
download | ice-d6c5a5a52310ea05205a599709990bf6bee0499a.tar.bz2 ice-d6c5a5a52310ea05205a599709990bf6bee0499a.tar.xz ice-d6c5a5a52310ea05205a599709990bf6bee0499a.zip |
Fixed ICE-6695 - ensure buffers are not cleared too early for WS/SSL transports
Diffstat (limited to 'csharp/src')
-rw-r--r-- | csharp/src/Ice/StreamSocket.cs | 2 | ||||
-rw-r--r-- | csharp/src/Ice/WSTransceiver.cs | 25 |
2 files changed, 24 insertions, 3 deletions
diff --git a/csharp/src/Ice/StreamSocket.cs b/csharp/src/Ice/StreamSocket.cs index 10c1f6488dc..d492caeef8d 100644 --- a/csharp/src/Ice/StreamSocket.cs +++ b/csharp/src/Ice/StreamSocket.cs @@ -108,7 +108,7 @@ namespace IceInternal public bool isConnected() { - return _state == StateConnected; + return _state == StateConnected && _fd != null; } public Socket fd() diff --git a/csharp/src/Ice/WSTransceiver.cs b/csharp/src/Ice/WSTransceiver.cs index b758e44dc7c..90859f6721e 100644 --- a/csharp/src/Ice/WSTransceiver.cs +++ b/csharp/src/Ice/WSTransceiver.cs @@ -318,8 +318,14 @@ namespace IceInternal // // Clear the buffers now instead of waiting for destruction. // - _readBuffer.clear(); - _writeBuffer.clear(); + if(!_readPending) + { + _readBuffer.clear(); + } + if(!_writePending) + { + _writeBuffer.clear(); + } } public EndpointI bind() @@ -539,6 +545,7 @@ namespace IceInternal { Debug.Assert(_readPending); _readPending = false; + if(_state < StateOpened) { Debug.Assert(_finishRead); @@ -570,6 +577,13 @@ namespace IceInternal _finishRead = false; _delegate.finishRead(_readBuffer); } + + if(_state == StateClosed) + { + _readBuffer.clear(); + return; + } + postRead(buf); } @@ -611,6 +625,7 @@ namespace IceInternal public void finishWrite(Buffer buf) { _writePending = false; + if(_state < StateOpened) { if(_state < StateConnected) @@ -634,6 +649,12 @@ namespace IceInternal _delegate.finishWrite(buf); } + if(_state == StateClosed) + { + _writeBuffer.clear(); + return; + } + postWrite(buf, SocketOperation.None); } |