summaryrefslogtreecommitdiff
path: root/cpp/src/IceGrid/NodeCache.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'cpp/src/IceGrid/NodeCache.cpp')
-rw-r--r--cpp/src/IceGrid/NodeCache.cpp35
1 files changed, 31 insertions, 4 deletions
diff --git a/cpp/src/IceGrid/NodeCache.cpp b/cpp/src/IceGrid/NodeCache.cpp
index 812cb1977df..dc6eb107a11 100644
--- a/cpp/src/IceGrid/NodeCache.cpp
+++ b/cpp/src/IceGrid/NodeCache.cpp
@@ -1,6 +1,6 @@
// **********************************************************************
//
-// Copyright (c) 2003-2008 ZeroC, Inc. All rights reserved.
+// Copyright (c) 2003-2009 ZeroC, Inc. All rights reserved.
//
// This copy of Ice is licensed to you under the terms described in the
// ICE_LICENSE file included in this distribution.
@@ -746,8 +746,12 @@ NodeEntry::__decRef()
void
NodeEntry::checkSession() const
{
- if(_session && !_session->isDestroyed())
+ if(_session)
{
+ if(_session->isDestroyed())
+ {
+ throw NodeUnreachableException(_name, "the node is not active");
+ }
return;
}
else if(!_proxy && !_registering)
@@ -781,10 +785,13 @@ NodeEntry::checkSession() const
while(_registering)
{
- wait();
+ if(!timedWait(IceUtil::Time::seconds(5)))
+ {
+ break; // Consider the node down if it doesn't respond promptly.
+ }
}
- if(!_session)
+ if(!_session || _session->isDestroyed())
{
throw NodeUnreachableException(_name, "the node is not active");
}
@@ -970,5 +977,25 @@ NodeEntry::getInternalServerDescriptor(const ServerInfo& info) const
//
forEachCommunicator(ToInternalServerDescriptor(server, _session->getInfo(), iceVersion))(info.descriptor);
+ //
+ // For Ice servers > 3.3.0 escape the properties.
+ //
+ if(iceVersion == 0 || iceVersion >= 30300)
+ {
+ PropertyDescriptorSeq newProps;
+ for(PropertyDescriptorSeq::const_iterator p = props.begin(); p != props.end(); ++p)
+ {
+ if(p->value.empty() && p->name.find('#') == 0)
+ {
+ newProps.push_back(createProperty(p->name));
+ }
+ else
+ {
+ newProps.push_back(createProperty(escapeProperty(p->name), escapeProperty(p->value)));
+ }
+ }
+ server->properties["config"] = newProps;
+ }
+
return server;
}