diff options
author | Gordon Sim <gsim@apache.org> | 2015-07-27 19:59:36 +0000 |
---|---|---|
committer | Gordon Sim <gsim@apache.org> | 2015-07-27 19:59:36 +0000 |
commit | 28b802e76bb0542db1173e19dcb6979670a1bb70 (patch) | |
tree | 2301f7237bc40974698e9b4a910816e65967508c | |
parent | 51c209e9a99f017dfad429e6367ad6415499a34c (diff) | |
download | qpid-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.cpp | 5 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/ConnectionHandler.cpp | 6 | ||||
-rw-r--r-- | qpid/cpp/src/qpid/broker/amqp/Connection.cpp | 14 |
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); } |