summaryrefslogtreecommitdiff
path: root/cpp/src/Ice/winrt
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2015-08-11 10:42:04 +0200
committerBenoit Foucher <benoit@zeroc.com>2015-08-11 10:42:04 +0200
commit12f8959ad8d0843a55dd309f087dd1f8a5dda88f (patch)
tree5186165ce0e0b4bb432a9e70314e597563bb8c56 /cpp/src/Ice/winrt
parentUpdates branch description (diff)
downloadice-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.cpp14
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;
}