Author: gsim
Date: Mon Jul 27 19:59:36 2015
New Revision: 1692936

URL: http://svn.apache.org/r1692936
Log:
QPID-6654, QPID-6592: ensure system info ptr is valid before using it, and 
ensure it is valid even if management is disabled

Modified:
    qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
    qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp?rev=1692936&r1=1692935&r2=1692936&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/Broker.cpp Mon Jul 27 19:59:36 2015
@@ -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);

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp?rev=1692936&r1=1692935&r2=1692936&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/ConnectionHandler.cpp Mon Jul 27 
19:59:36 2015
@@ -123,8 +123,10 @@ ConnectionHandler::Handler::Handler(qpid
 
         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);

Modified: qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp
URL: 
http://svn.apache.org/viewvc/qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp?rev=1692936&r1=1692935&r2=1692936&view=diff
==============================================================================
--- qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp (original)
+++ qpid/trunk/qpid/cpp/src/qpid/broker/amqp/Connection.cpp Mon Jul 27 19:59:36 
2015
@@ -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);
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to