diff options
Diffstat (limited to 'src/mongo/base/initializer.cpp')
| -rw-r--r-- | src/mongo/base/initializer.cpp | 36 |
1 files changed, 19 insertions, 17 deletions
diff --git a/src/mongo/base/initializer.cpp b/src/mongo/base/initializer.cpp index 8792ec2de97..1bb77c967ca 100644 --- a/src/mongo/base/initializer.cpp +++ b/src/mongo/base/initializer.cpp @@ -16,6 +16,7 @@ #include "mongo/base/initializer.h" #include <iostream> +#include "mongo/util/assert_util.h" #include "mongo/base/global_initializer.h" namespace mongo { @@ -31,7 +32,7 @@ namespace mongo { if (Status::OK() != status) return status; - InitializerContext context(args, env, &_configVariables); + InitializerContext context(args, env); for (size_t i = 0; i < sortedNodes.size(); ++i) { InitializerFunction fn = _graph.getInitializerFunction(sortedNodes[i]); @@ -40,7 +41,12 @@ namespace mongo { "topSort returned a node that has no associated function: \"" + sortedNodes[i] + '"'); } - status = fn(&context); + try { + status = fn(&context); + } catch( const DBException& xcp ) { + return xcp.toStatus(); + } + if (Status::OK() != status) return status; } @@ -49,21 +55,10 @@ namespace mongo { Status runGlobalInitializers(const InitializerContext::ArgumentVector& args, const InitializerContext::EnvironmentMap& env) { - return getGlobalInitializer().execute(args, env); } - void runGlobalInitializersOrDie(const InitializerContext::ArgumentVector& args, - const InitializerContext::EnvironmentMap& env) { - - Status status = runGlobalInitializers(args, env); - if (Status::OK() != status) { - std::cerr << "Failed global initialization: " << status << std::endl; - ::_exit(1); - } - } - - void runGlobalInitializersOrDie(int argc, const char* const* argv, const char* const* envp) { + Status runGlobalInitializers(int argc, const char* const* argv, const char* const* envp) { InitializerContext::ArgumentVector args(argc); std::copy(argv, argv + argc, args.begin()); @@ -73,14 +68,21 @@ namespace mongo { for(; *envp; ++envp) { const char* firstEqualSign = strchr(*envp, '='); if (!firstEqualSign) { - std::cerr << "Failed global initialization: malformed environment block\n"; - ::_exit(1); + return Status(ErrorCodes::BadValue, "malformed environment block"); } env[std::string(*envp, firstEqualSign)] = std::string(firstEqualSign + 1); } } - runGlobalInitializersOrDie(args, env); + return runGlobalInitializers(args, env); + } + + void runGlobalInitializersOrDie(int argc, const char* const* argv, const char* const* envp) { + Status status = runGlobalInitializers(argc, argv, envp); + if (!status.isOK()) { + std::cerr << "Failed global initialization: " << status << std::endl; + ::_exit(1); + } } } // namespace mongo |
