//-------------------------------------------------------------------------------- ChilliSource::SystemInfoCUPtr SystemInfoFactory::CreateSystemInfo() noexcept { // Create DeviceInfo. ChilliSource::DeviceInfo deviceInfo(k_deviceModel, k_deviceModelType, k_deviceManufacturer, k_deviceUdid, GetLocale(), ParseLanguageFromLocale(GetLocale()), GetOSVersion(), GetNumberOfCPUCores()); // Create ScreenInfo. ChilliSource::ScreenInfo screenInfo(GetScreenResolution(), 1.0f, 1.0f, GetSupportedFullscreenResolutions()); //Create RenderInfo ChilliSource::RenderInfo renderInfo = OpenGL::RenderInfoFactory::CreateRenderInfo(); // Create SystemInfo. ChilliSource::SystemInfoUPtr systemInfo(new ChilliSource::SystemInfo(deviceInfo, screenInfo, renderInfo, "")); return std::move(systemInfo); }
void ndbd_run(bool foreground, int report_fd, const char* connect_str, int force_nodeid, const char* bind_address, bool no_start, bool initial, bool initialstart, unsigned allocated_nodeid) { #ifdef _WIN32 { char shutdown_event_name[32]; _snprintf(shutdown_event_name, sizeof(shutdown_event_name), "ndbd_shutdown_%d", GetCurrentProcessId()); g_shutdown_event = CreateEvent(NULL, TRUE, FALSE, shutdown_event_name); if (g_shutdown_event == NULL) { g_eventLogger->error("Failed to create shutdown event, error: %d", GetLastError()); ndbd_exit(1); } HANDLE thread = CreateThread(NULL, 0, &shutdown_thread, NULL, 0, NULL); if (thread == NULL) { g_eventLogger->error("couldn't start shutdown thread, error: %d", GetLastError()); ndbd_exit(1); } } #endif if (foreground) g_eventLogger->info("Ndb started in foreground"); if (report_fd) { g_eventLogger->debug("Opening report stream on fd: %d", report_fd); // Open a stream for sending extra status to angel if (!(angel_info_w = fdopen(report_fd, "w"))) { g_eventLogger->error("Failed to open stream for reporting " "to angel, error: %d (%s)", errno, strerror(errno)); ndbd_exit(-1); } } else { // No reporting requested, open /dev/null const char* dev_null = IF_WIN("nul", "/dev/null"); if (!(angel_info_w = fopen(dev_null, "w"))) { g_eventLogger->error("Failed to open stream for reporting to " "'%s', error: %d (%s)", dev_null, errno, strerror(errno)); ndbd_exit(-1); } } globalEmulatorData.create(); Configuration* theConfig = globalEmulatorData.theConfiguration; if(!theConfig->init(no_start, initial, initialstart)) { g_eventLogger->error("Failed to init Configuration"); ndbd_exit(-1); } theConfig->fetch_configuration(connect_str, force_nodeid, bind_address, allocated_nodeid); if (NdbDir::chdir(NdbConfig_get_path(NULL)) != 0) { g_eventLogger->warning("Cannot change directory to '%s', error: %d", NdbConfig_get_path(NULL), errno); // Ignore error } theConfig->setupConfiguration(); if (get_multithreaded_config(globalEmulatorData)) ndbd_exit(-1); systemInfo(* theConfig, * theConfig->m_logLevel); NdbThread* pWatchdog = globalEmulatorData.theWatchDog->doStart(); { /* * Memory allocation can take a long time for large memory. * * So we want the watchdog to monitor the process of initial allocation. */ Uint32 watchCounter; watchCounter = 9; // Means "doing allocation" globalEmulatorData.theWatchDog->registerWatchedThread(&watchCounter, 0); if (init_global_memory_manager(globalEmulatorData, &watchCounter)) ndbd_exit(1); globalEmulatorData.theWatchDog->unregisterWatchedThread(0); } globalEmulatorData.theThreadConfig->init(); #ifdef VM_TRACE // Create a signal logger before block constructors char *buf= NdbConfig_SignalLogFileName(globalData.ownId); NdbAutoPtr<char> tmp_aptr(buf); FILE * signalLog = fopen(buf, "a"); globalSignalLoggers.setOwnNodeId(globalData.ownId); globalSignalLoggers.setOutputStream(signalLog); #if 1 // to log startup { const char* p = NdbEnv_GetEnv("NDB_SIGNAL_LOG", (char*)0, 0); if (p != 0) { char buf[200]; BaseString::snprintf(buf, sizeof(buf), "BLOCK=%s", p); for (char* q = buf; *q != 0; q++) *q = toupper(toascii(*q)); globalSignalLoggers.log(SignalLoggerManager::LogInOut, buf); globalData.testOn = 1; assert(signalLog != 0); fprintf(signalLog, "START\n"); fflush(signalLog); } } #endif #endif // Load blocks (both main and workers) globalEmulatorData.theSimBlockList->load(globalEmulatorData); // Set thread concurrency for Solaris' light weight processes int status; status = NdbThread_SetConcurrencyLevel(30); assert(status == 0); catchsigs(foreground); /** * Do startup */ switch(globalData.theRestartFlag){ case initial_state: globalEmulatorData.theThreadConfig->doStart(NodeState::SL_CMVMI); break; case perform_start: globalEmulatorData.theThreadConfig->doStart(NodeState::SL_CMVMI); globalEmulatorData.theThreadConfig->doStart(NodeState::SL_STARTING); break; default: assert("Illegal state globalData.theRestartFlag" == 0); } globalTransporterRegistry.startSending(); globalTransporterRegistry.startReceiving(); if (!globalTransporterRegistry.start_service(*globalEmulatorData.m_socket_server)){ ndbout_c("globalTransporterRegistry.start_service() failed"); ndbd_exit(-1); } // Re-use the mgm handle as a transporter if(!globalTransporterRegistry.connect_client( theConfig->get_config_retriever()->get_mgmHandlePtr())) ERROR_SET(fatal, NDBD_EXIT_CONNECTION_SETUP_FAILED, "Failed to convert mgm connection to a transporter", __FILE__); NdbThread* pTrp = globalTransporterRegistry.start_clients(); if (pTrp == 0) { ndbout_c("globalTransporterRegistry.start_clients() failed"); ndbd_exit(-1); } NdbThread* pSockServ = globalEmulatorData.m_socket_server->startServer(); globalEmulatorData.theConfiguration->addThread(pTrp, SocketClientThread); globalEmulatorData.theConfiguration->addThread(pWatchdog, WatchDogThread); globalEmulatorData.theConfiguration->addThread(pSockServ, SocketServerThread); // theConfig->closeConfiguration(); { NdbThread *pThis = NdbThread_CreateObject(0); Uint32 inx = globalEmulatorData.theConfiguration->addThread(pThis, MainThread); globalEmulatorData.theThreadConfig->ipControlLoop(pThis, inx); globalEmulatorData.theConfiguration->removeThreadId(inx); } NdbShutdown(0, NST_Normal); ndbd_exit(0); }
int main(int argc, char *argv[]) { int status = 0; char opt; int sysname = 0, nodename = 0, release = 0, version = 0, machine = 0; struct utsname data; if (argc > 1) { // Check options while (strchr("aimnoprsv?", (opt = getopt(argc, argv, "aimnoprsv")))) { switch (opt) { case 'a': sysname = 1, nodename = 1, release = 1, version = 1, machine = 1; break; case 'o': case 's': sysname = 1; break; case 'n': nodename = 1; break; case 'r': release = 1; break; case 'v': version = 1; break; case 'i': case 'm': case 'p': machine = 1; break; default: fprintf(stderr, "Unknown option '%c'\n", optopt); status = errno = ERR_INVALID; perror(argv[0]); return (status); } } } else { sysname = 1; } memset(&data, 0, sizeof(struct utsname)); status = systemInfo(&data); if (status < 0) { errno = status; perror(argv[0]); return (status); } if (sysname && data.sysname[0]) printf("%s ", data.sysname); if (nodename && data.nodename[0]) { printf("%s", data.nodename); if (data.domainname[0]) printf(".%s", data.domainname); printf(" "); } if (release && data.release[0]) printf("%s ", data.release); if (version && data.version[0]) printf("%s ", data.version); if (machine && data.machine[0]) printf("%s ", data.machine); printf("\n"); return (status = 0); }