summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGordon Sim <gsim@apache.org>2015-07-27 19:59:36 +0000
committerGordon Sim <gsim@apache.org>2015-07-27 19:59:36 +0000
commit28b802e76bb0542db1173e19dcb6979670a1bb70 (patch)
tree2301f7237bc40974698e9b4a910816e65967508c
parent51c209e9a99f017dfad429e6367ad6415499a34c (diff)
downloadqpid-python-28b802e76bb0542db1173e19dcb6979670a1bb70.tar.gz
QPID-6654, QPID-6592: ensure system info ptr is valid before using it, and ensure it is valid even if management is disabled
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1692936 13f79535-47bb-0310-9956-ffa450edef68
-rw-r--r--qpid/cpp/src/qpid/broker/Broker.cpp5
-rw-r--r--qpid/cpp/src/qpid/broker/ConnectionHandler.cpp6
-rw-r--r--qpid/cpp/src/qpid/broker/amqp/Connection.cpp14
3 files changed, 14 insertions, 11 deletions
diff --git a/qpid/cpp/src/qpid/broker/Broker.cpp b/qpid/cpp/src/qpid/broker/Broker.cpp
index 622681ab2a..09b437e140 100644
--- a/qpid/cpp/src/qpid/broker/Broker.cpp
+++ b/qpid/cpp/src/qpid/broker/Broker.cpp
@@ -252,6 +252,8 @@ Broker::Broker(const BrokerOptions& conf) :
if (!dataDir.isEnabled()) {
QPID_LOG (info, "No data directory - Disabling persistent configuration");
}
+ System* system = new System (dataDir.isEnabled() ? dataDir.getPath() : string(), this);
+ systemObject = System::shared_ptr(system);
try {
if (conf.enableMgmt) {
QPID_LOG(info, "Management enabled");
@@ -260,9 +262,6 @@ Broker::Broker(const BrokerOptions& conf) :
managementAgent->setName("apache.org", "qpidd");
_qmf::Package packageInitializer(managementAgent.get());
- System* system = new System (dataDir.isEnabled() ? dataDir.getPath() : string(), this);
- systemObject = System::shared_ptr(system);
-
mgmtObject = _qmf::Broker::shared_ptr(new _qmf::Broker(managementAgent.get(), this, system, "amqp-broker"));
mgmtObject->set_systemRef(system->GetManagementObject()->getObjectId());
mgmtObject->set_port(conf.port);
diff --git a/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp b/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
index 49afd8d24d..545b164ef4 100644
--- a/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
+++ b/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
@@ -123,8 +123,10 @@ ConnectionHandler::Handler::Handler(qpid::broker::amqp_0_10::Connection& c, bool
properties.setString("product", qpid::product);
properties.setString("version", qpid::version);
- properties.setString("platform", sysInfo->getOsName());
- properties.setString("host", sysInfo->getNodeName());
+ if (sysInfo) {
+ properties.setString("platform", sysInfo->getOsName());
+ properties.setString("host", sysInfo->getNodeName());
+ }
properties.setString(QPID_FED_TAG, connection.getBroker().getFederationTag());
authenticator = SaslAuthenticator::createAuthenticator(c);
diff --git a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
index b4dab83594..322192f551 100644
--- a/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
+++ b/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
@@ -353,8 +353,6 @@ void Connection::open()
pn_data_t *props = pn_connection_properties(connection);
if (props) {
boost::shared_ptr<const System> sysInfo = getBroker().getSystem();
- std::string osName(sysInfo->getOsName());
- std::string nodeName(sysInfo->getNodeName());
pn_data_clear(props);
pn_data_put_map(props);
@@ -363,10 +361,14 @@ void Connection::open()
pn_data_put_string(props, pn_bytes(qpid::product.size(), qpid::product.c_str()));
pn_data_put_symbol(props, pn_bytes(7, "version"));
pn_data_put_string(props, pn_bytes(qpid::version.size(), qpid::version.c_str()));
- pn_data_put_symbol(props, pn_bytes(8, "platform"));
- pn_data_put_string(props, pn_bytes(osName.size(), osName.c_str()));
- pn_data_put_symbol(props, pn_bytes(4, "host"));
- pn_data_put_string(props, pn_bytes(nodeName.size(), nodeName.c_str()));
+ if (sysInfo) {
+ std::string osName(sysInfo->getOsName());
+ std::string nodeName(sysInfo->getNodeName());
+ pn_data_put_symbol(props, pn_bytes(8, "platform"));
+ pn_data_put_string(props, pn_bytes(osName.size(), osName.c_str()));
+ pn_data_put_symbol(props, pn_bytes(4, "host"));
+ pn_data_put_string(props, pn_bytes(nodeName.size(), nodeName.c_str()));
+ }
pn_data_exit(props);
pn_data_rewind(props);
}