void runGlobalInitializersOrDie(int argc, const char* const* argv, const char* const* envp) { InitializerContext::ArgumentVector args(argc); std::copy(argv, argv + argc, args.begin()); InitializerContext::EnvironmentMap env; if (envp) { for(; *envp; ++envp) { const char* firstEqualSign = strchr(*envp, '='); if (!firstEqualSign) { std::cerr << "Failed global initialization: malformed environment block\n"; ::_exit(1); } env[std::string(*envp, firstEqualSign)] = std::string(firstEqualSign + 1); } } runGlobalInitializersOrDie(args, env); }
int bridgeMain(int argc, char** argv, char** envp) { static StaticObserver staticObserver; registerShutdownTask([&] { // NOTE: This function may be called at any time. It must not // depend on the prior execution of mongo initializers or the // existence of threads. ListeningSockets::get()->closeAll(); listener->shutdownAll(); }); setupSignalHandlers(); runGlobalInitializersOrDie(argc, argv, envp); startSignalProcessingThread(LogFileStatus::kNoLogFileToRotate); listener = stdx::make_unique<BridgeListener>(); listener->setupSockets(); listener->initAndListen(); return EXIT_CLEAN; }