void setupSignalHandlers() { setupSIGTRAPforGDB(); setupCoreSignals(); signal(SIGTERM, sighandler); signal(SIGINT, sighandler); #if defined(SIGQUIT) signal( SIGQUIT , printStackAndExit ); #endif signal( SIGSEGV , printStackAndExit ); signal( SIGABRT , printStackAndExit ); signal( SIGFPE , printStackAndExit ); #if defined(SIGBUS) signal( SIGBUS , printStackAndExit ); #endif #if defined(SIGPIPE) signal( SIGPIPE , SIG_IGN ); #endif #ifndef _WIN32 sigemptyset( &asyncSignals ); sigaddset( &asyncSignals, SIGUSR1 ); startSignalProcessingThread(); #endif setWindowsUnhandledExceptionFilter(); set_new_handler( my_new_handler ); }
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; }