diff options
author | Benoit Foucher <benoit@zeroc.com> | 2015-08-11 10:42:04 +0200 |
---|---|---|
committer | Benoit Foucher <benoit@zeroc.com> | 2015-08-11 10:42:04 +0200 |
commit | 12f8959ad8d0843a55dd309f087dd1f8a5dda88f (patch) | |
tree | 5186165ce0e0b4bb432a9e70314e597563bb8c56 /cpp/src/Ice/winrt | |
parent | Updates branch description (diff) | |
download | ice-12f8959ad8d0843a55dd309f087dd1f8a5dda88f.tar.bz2 ice-12f8959ad8d0843a55dd309f087dd1f8a5dda88f.tar.xz ice-12f8959ad8d0843a55dd309f087dd1f8a5dda88f.zip |
Fixed ICE-6695, Ice for WinRT hang on Windows 10
Diffstat (limited to 'cpp/src/Ice/winrt')
-rw-r--r-- | cpp/src/Ice/winrt/StreamTransceiver.cpp | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/cpp/src/Ice/winrt/StreamTransceiver.cpp b/cpp/src/Ice/winrt/StreamTransceiver.cpp index 54a29035feb..e0a7acf6b9a 100644 --- a/cpp/src/Ice/winrt/StreamTransceiver.cpp +++ b/cpp/src/Ice/winrt/StreamTransceiver.cpp @@ -99,6 +99,11 @@ void IceInternal::StreamTransceiver::close() { assert(_fd != INVALID_SOCKET); + + _completedHandler = nullptr; + _readOperationCompletedHandler = nullptr; + _writeOperationCompletedHandler = nullptr; + try { closeSocket(_fd); @@ -146,6 +151,7 @@ IceInternal::StreamTransceiver::startWrite(Buffer& buf) if(!checkIfErrorOrCompleted(SocketOperationConnect, action)) { + SocketOperationCompletedHandler^ completed = _completedHandler; action->Completed = ref new AsyncActionCompletedHandler( [=] (IAsyncAction^ info, Windows::Foundation::AsyncStatus status) { @@ -157,9 +163,8 @@ IceInternal::StreamTransceiver::startWrite(Buffer& buf) else { _write.count = 0; - _verified = true; } - _completedHandler(SocketOperationConnect); + completed(SocketOperationConnect); }); } } @@ -204,6 +209,11 @@ IceInternal::StreamTransceiver::finishWrite(Buffer& buf) { if(_state < StateConnected) { + if(_write.count == SOCKET_ERROR) + { + checkConnectErrorCode(__FILE__, __LINE__, _write.error, _connectAddr.host); + } + _verified = true; return; } |