/** * execute when reactor timeout and reactor finish */ static void swReactor_onTimeout_and_Finish(swReactor *reactor) { //check timer if (reactor->check_timer) { SwooleG.timer.select(&SwooleG.timer); } if (SwooleG.serv && swIsMaster()) { swoole_update_time(); } }
void swoole_init(void) { struct rlimit rlmt; if (SwooleG.running) { return; } bzero(&SwooleG, sizeof(SwooleG)); bzero(&SwooleWG, sizeof(SwooleWG)); bzero(sw_error, SW_ERROR_MSG_SIZE); SwooleG.running = 1; sw_errno = 0; SwooleG.log_fd = STDOUT_FILENO; SwooleG.cpu_num = sysconf(_SC_NPROCESSORS_ONLN); SwooleG.pagesize = getpagesize(); SwooleG.pid = getpid(); //random seed srandom(time(NULL)); //init global lock swMutex_create(&SwooleG.lock, 0); if (getrlimit(RLIMIT_NOFILE, &rlmt) < 0) { swWarn("getrlimit() failed. Error: %s[%d]", strerror(errno), errno); SwooleG.max_sockets = 1024; } else { SwooleG.max_sockets = (uint32_t) rlmt.rlim_cur; } //init signalfd #ifdef HAVE_SIGNALFD swSignalfd_init(); SwooleG.use_signalfd = 1; #endif //timerfd #ifdef HAVE_TIMERFD SwooleG.use_timerfd = 1; #endif SwooleG.use_timer_pipe = 1; //初始化全局内存 SwooleG.memory_pool = swMemoryGlobal_new(SW_GLOBAL_MEMORY_PAGESIZE, 1); if (SwooleG.memory_pool == NULL) { swError("[Master] Fatal Error: create global memory failed."); } SwooleGS = SwooleG.memory_pool->alloc(SwooleG.memory_pool, sizeof(swServerGS)); if (SwooleGS == NULL) { swError("[Master] Fatal Error: alloc memory for SwooleGS failed."); } SwooleStats = SwooleG.memory_pool->alloc(SwooleG.memory_pool, sizeof(swServerStats)); if (SwooleGS == NULL) { swError("[Master] Fatal Error: alloc memory for SwooleStats failed."); } swoole_update_time(); }
void swoole_init(void) { struct rlimit rlmt; if (SwooleG.running) { return; } bzero(&SwooleG, sizeof(SwooleG)); bzero(&SwooleWG, sizeof(SwooleWG)); bzero(sw_error, SW_ERROR_MSG_SIZE); SwooleG.running = 1; sw_errno = 0; SwooleG.log_fd = STDOUT_FILENO; SwooleG.cpu_num = sysconf(_SC_NPROCESSORS_ONLN); SwooleG.pagesize = getpagesize(); SwooleG.pid = getpid(); SwooleG.socket_buffer_size = SW_SOCKET_BUFFER_SIZE; //get system uname uname(&SwooleG.uname); //random seed srandom(time(NULL)); //init global shared memory SwooleG.memory_pool = swMemoryGlobal_new(SW_GLOBAL_MEMORY_PAGESIZE, 1); if (SwooleG.memory_pool == NULL) { printf("[Master] Fatal Error: create global memory failed."); exit(1); } SwooleGS = SwooleG.memory_pool->alloc(SwooleG.memory_pool, sizeof(swServerGS)); if (SwooleGS == NULL) { printf("[Master] Fatal Error: alloc memory for SwooleGS failed."); exit(2); } //init global lock swMutex_create(&SwooleGS->lock, 1); swMutex_create(&SwooleGS->lock_2, 1); if (getrlimit(RLIMIT_NOFILE, &rlmt) < 0) { swWarn("getrlimit() failed. Error: %s[%d]", strerror(errno), errno); SwooleG.max_sockets = 1024; } else { SwooleG.max_sockets = (uint32_t) rlmt.rlim_cur; } SwooleG.module_stack = swString_new(8192); if (SwooleG.module_stack == NULL) { exit(3); } if (!SwooleG.task_tmpdir) { SwooleG.task_tmpdir = strndup(SW_TASK_TMP_FILE, sizeof(SW_TASK_TMP_FILE)); SwooleG.task_tmpdir_len = sizeof(SW_TASK_TMP_FILE); } char *tmp_dir = swoole_dirname(SwooleG.task_tmpdir); //create tmp dir if (access(tmp_dir, R_OK) < 0 && swoole_mkdir_recursive(tmp_dir) < 0) { swWarn("create task tmp dir(%s) failed.", tmp_dir); } if (tmp_dir) { sw_strdup_free(tmp_dir); } //init signalfd #ifdef HAVE_SIGNALFD swSignalfd_init(); SwooleG.use_signalfd = 1; #endif //timerfd #ifdef HAVE_TIMERFD SwooleG.use_timerfd = 1; #endif SwooleG.use_timer_pipe = 1; SwooleStats = SwooleG.memory_pool->alloc(SwooleG.memory_pool, sizeof(swServerStats)); if (SwooleStats == NULL) { swError("[Master] Fatal Error: alloc memory for SwooleStats failed."); } swoole_update_time(); }