From 7688253df9371e138f5254c02a07b84f86d6395d Mon Sep 17 00:00:00 2001 From: Arthur Britto Date: Fri, 18 Jan 2013 01:48:55 -0800 Subject: [PATCH] Work arround crashing on ~Config. --- src/cpp/ripple/Config.cpp | 6 +++++- src/cpp/ripple/Config.h | 2 +- src/cpp/ripple/main.cpp | 19 ++++++++++++------- 3 files changed, 18 insertions(+), 9 deletions(-) diff --git a/src/cpp/ripple/Config.cpp b/src/cpp/ripple/Config.cpp index a50f8f6768..66625cd26a 100644 --- a/src/cpp/ripple/Config.cpp +++ b/src/cpp/ripple/Config.cpp @@ -276,6 +276,8 @@ void Config::load() smtTmp = sectionEntries(secConfig, SECTION_RPC_STARTUP); if (smtTmp) { + Json::Value jvArray(Json::arrayValue); + BOOST_FOREACH(const std::string& strJson, *smtTmp) { Json::Reader jrReader; @@ -284,8 +286,10 @@ void Config::load() if (!jrReader.parse(strJson, jvCommand)) throw std::runtime_error(boost::str(boost::format("Couldn't parse ["SECTION_RPC_STARTUP"] command: %s") % strJson)); - RPC_STARTUP.push_back(jvCommand); + RPC_STARTUP.append(jvCommand); } + + RPC_STARTUP = jvArray; } if (sectionSingleB(secConfig, SECTION_DATABASE_PATH, DATABASE_PATH)) diff --git a/src/cpp/ripple/Config.h b/src/cpp/ripple/Config.h index 9157561799..e67200fb85 100644 --- a/src/cpp/ripple/Config.h +++ b/src/cpp/ripple/Config.h @@ -118,7 +118,7 @@ public: std::string RPC_PASSWORD; std::string RPC_USER; bool RPC_ALLOW_REMOTE; - std::vector RPC_STARTUP; + Json::Value RPC_STARTUP; // Validation RippleAddress VALIDATION_SEED, VALIDATION_PUB, VALIDATION_PRIV; diff --git a/src/cpp/ripple/main.cpp b/src/cpp/ripple/main.cpp index e0646428f0..e7d0379c98 100644 --- a/src/cpp/ripple/main.cpp +++ b/src/cpp/ripple/main.cpp @@ -30,16 +30,21 @@ void startServer() // // Execute start up rpc commands. // - BOOST_FOREACH(const Json::Value& jvCommand, theConfig.RPC_STARTUP) + if (theConfig.RPC_STARTUP.isArray()) { - if (!theConfig.QUIET) - cerr << "Startup RPC: " << jvCommand << endl; + for (int i = 0; i != theConfig.RPC_STARTUP.size(); ++i) + { + const Json::Value& jvCommand = theConfig.RPC_STARTUP[i]; - RPCHandler rhHandler(&theApp->getOPs()); + if (!theConfig.QUIET) + cerr << "Startup RPC: " << jvCommand << endl; - std::cerr << "Result: " - << rhHandler.doCommand(jvCommand, RPCHandler::ADMIN) - << std::endl; + RPCHandler rhHandler(&theApp->getOPs()); + + std::cerr << "Result: " + << rhHandler.doCommand(jvCommand, RPCHandler::ADMIN) + << std::endl; + } } theApp->run(); // Blocks till we get a stop RPC.