summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenoit Foucher <benoit@zeroc.com>2008-01-04 12:11:16 +0100
committerBenoit Foucher <benoit@zeroc.com>2008-01-04 12:11:16 +0100
commit99cecc871b86889af0a30aa27eec40a5cadad332 (patch)
treeeeb0b871e5fa2b243781572d3b1ea904fa760fec
parentFixed bug 2599 (diff)
downloadice-99cecc871b86889af0a30aa27eec40a5cadad332.tar.bz2
ice-99cecc871b86889af0a30aa27eec40a5cadad332.tar.xz
ice-99cecc871b86889af0a30aa27eec40a5cadad332.zip
- Added missing notifyAll in ConnectRequestHandler (which could cause async
requests to hang if an exception occured during flushing). - Changed getaddrinfo(0, "0", ...) calls to getaddrinfo(0, "1", ...). Solaris doesn't recognize "0" as a valid service name. - Workaround HP-UX compiler bug caused by Glacier2::Instance inlined methods.
-rw-r--r--cpp/src/Glacier2/Instance.h20
-rw-r--r--cpp/src/Ice/ConnectRequestHandler.cpp2
-rw-r--r--cpp/src/Ice/Network.cpp4
-rwxr-xr-xcs/src/Ice/ConnectRequestHandler.cs2
-rw-r--r--java/src/IceInternal/ConnectRequestHandler.java2
5 files changed, 20 insertions, 10 deletions
diff --git a/cpp/src/Glacier2/Instance.h b/cpp/src/Glacier2/Instance.h
index dbe05d48e56..58fcad8fd06 100644
--- a/cpp/src/Glacier2/Instance.h
+++ b/cpp/src/Glacier2/Instance.h
@@ -27,14 +27,18 @@ public:
Instance(const Ice::CommunicatorPtr&, const Ice::ObjectAdapterPtr&, const Ice::ObjectAdapterPtr&);
~Instance();
- Ice::CommunicatorPtr communicator() const { return _communicator; }
- Ice::ObjectAdapterPtr clientObjectAdapter() const { return _clientAdapter; }
- Ice::ObjectAdapterPtr serverObjectAdapter() const { return _serverAdapter; }
- Ice::PropertiesPtr properties() const { return _properties; }
- Ice::LoggerPtr logger() const { return _logger; }
-
- RequestQueueThreadPtr clientRequestQueueThread() const { return _clientRequestQueueThread; }
- RequestQueueThreadPtr serverRequestQueueThread() const { return _serverRequestQueueThread; }
+ //
+ // COMPILERFIX: returning const& is necessary on HP-UX (otherwise, it crashes in the Blobject
+ // constructor).
+ //
+ const Ice::CommunicatorPtr& communicator() const { return _communicator; }
+ const Ice::ObjectAdapterPtr& clientObjectAdapter() const { return _clientAdapter; }
+ const Ice::ObjectAdapterPtr& serverObjectAdapter() const { return _serverAdapter; }
+ const Ice::PropertiesPtr& properties() const { return _properties; }
+ const Ice::LoggerPtr& logger() const { return _logger; }
+
+ const RequestQueueThreadPtr& clientRequestQueueThread() const { return _clientRequestQueueThread; }
+ const RequestQueueThreadPtr& serverRequestQueueThread() const { return _serverRequestQueueThread; }
void destroy();
diff --git a/cpp/src/Ice/ConnectRequestHandler.cpp b/cpp/src/Ice/ConnectRequestHandler.cpp
index 02e3227988e..20d326061dc 100644
--- a/cpp/src/Ice/ConnectRequestHandler.cpp
+++ b/cpp/src/Ice/ConnectRequestHandler.cpp
@@ -420,6 +420,7 @@ ConnectRequestHandler::flushRequests()
assert(!_exception.get() && !_requests.empty());
_exception.reset(dynamic_cast<Ice::LocalException*>(ex.get()->ice_clone()));
_reference->getInstance()->clientThreadPool()->execute(new FlushRequestsWithExceptionWrapper(this, ex));
+ notifyAll();
return;
}
catch(const Ice::LocalException& ex)
@@ -428,6 +429,7 @@ ConnectRequestHandler::flushRequests()
assert(!_exception.get() && !_requests.empty());
_exception.reset(dynamic_cast<Ice::LocalException*>(ex.ice_clone()));
_reference->getInstance()->clientThreadPool()->execute(new FlushRequestsWithException(this, ex));
+ notifyAll();
return;
}
diff --git a/cpp/src/Ice/Network.cpp b/cpp/src/Ice/Network.cpp
index be8e03e6402..002ea18b780 100644
--- a/cpp/src/Ice/Network.cpp
+++ b/cpp/src/Ice/Network.cpp
@@ -323,7 +323,7 @@ getAddressImpl(const string& host, int port, struct sockaddr_storage& addr, Prot
{
if(host.empty())
{
- rs = getaddrinfo(0, "0", &hints, &info);
+ rs = getaddrinfo(0, "1", &hints, &info);
}
else
{
@@ -1267,7 +1267,7 @@ IceInternal::getAddresses(const string& host, int port, ProtocolSupport protocol
{
if(host.empty())
{
- rs = getaddrinfo(0, "0", &hints, &info); // Get the address of the loopback interface
+ rs = getaddrinfo(0, "1", &hints, &info); // Get the address of the loopback interface
}
else
{
diff --git a/cs/src/Ice/ConnectRequestHandler.cs b/cs/src/Ice/ConnectRequestHandler.cs
index d4c0bea568c..59b29da8671 100755
--- a/cs/src/Ice/ConnectRequestHandler.cs
+++ b/cs/src/Ice/ConnectRequestHandler.cs
@@ -401,6 +401,7 @@ namespace IceInternal
threadPool.promoteFollower();
flushRequestsWithException(ex);
});
+ Monitor.PulseAll(this);
}
}
catch(Ice.LocalException ex)
@@ -414,6 +415,7 @@ namespace IceInternal
threadPool.promoteFollower();
flushRequestsWithException(ex);
});
+ Monitor.PulseAll(this);
}
}
diff --git a/java/src/IceInternal/ConnectRequestHandler.java b/java/src/IceInternal/ConnectRequestHandler.java
index 8bba5a6fc5a..e269dce1ee8 100644
--- a/java/src/IceInternal/ConnectRequestHandler.java
+++ b/java/src/IceInternal/ConnectRequestHandler.java
@@ -443,6 +443,7 @@ public class ConnectRequestHandler
flushRequestsWithException(ex);
};
});
+ notifyAll();
return;
}
}
@@ -461,6 +462,7 @@ public class ConnectRequestHandler
flushRequestsWithException(ex);
};
});
+ notifyAll();
return;
}
}