summaryrefslogtreecommitdiff
path: root/csharp/src
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2015-08-11 18:43:28 +0200
committerBenoit Foucher <benoit@zeroc.com>2015-08-11 18:43:28 +0200
commitd6c5a5a52310ea05205a599709990bf6bee0499a (patch)
treeb18147eb215de7484e97fb5afe789cbf3ec95110 /csharp/src
parentAdd SDK prefix to WinRT builds (diff)
downloadice-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.cs2
-rw-r--r--csharp/src/Ice/WSTransceiver.cs25
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);
}