int fpm_scoreboard_init_main() /* {{{ */ { struct fpm_worker_pool_s *wp; int i; #ifdef HAVE_TIMES #if (defined(HAVE_SYSCONF) && defined(_SC_CLK_TCK)) fpm_scoreboard_tick = sysconf(_SC_CLK_TCK); #else /* _SC_CLK_TCK */ #ifdef HZ fpm_scoreboard_tick = HZ; #else /* HZ */ fpm_scoreboard_tick = 100; #endif /* HZ */ #endif /* _SC_CLK_TCK */ zlog(ZLOG_DEBUG, "got clock tick '%.0f'", fpm_scoreboard_tick); #endif /* HAVE_TIMES */ for (wp = fpm_worker_all_pools; wp; wp = wp->next) { if (wp->config->pm_max_children < 1) { zlog(ZLOG_ERROR, "[pool %s] Unable to create scoreboard SHM because max_client is not set", wp->config->name); return -1; } if (wp->scoreboard) { zlog(ZLOG_ERROR, "[pool %s] Unable to create scoreboard SHM because it already exists", wp->config->name); return -1; } //为scoreboard分配空间,空间的大小根据 wp->config->pm_max_children值而定 //(wp->config->pm_max_children - 1) * sizeof(struct fpm_scoreboard_proc_s *) : scoreboard->procs占用的空间 wp->scoreboard = fpm_shm_alloc(sizeof(struct fpm_scoreboard_s) + (wp->config->pm_max_children - 1) * sizeof(struct fpm_scoreboard_proc_s *)); if (!wp->scoreboard) { return -1; } wp->scoreboard->nprocs = wp->config->pm_max_children; for (i = 0; i < wp->scoreboard->nprocs; i++) { wp->scoreboard->procs[i] = fpm_shm_alloc(sizeof(struct fpm_scoreboard_proc_s)); if (!wp->scoreboard->procs[i]) { return -1; } memset(wp->scoreboard->procs[i], 0, sizeof(struct fpm_scoreboard_proc_s)); } wp->scoreboard->pm = wp->config->pm; wp->scoreboard->start_epoch = time(NULL); strlcpy(wp->scoreboard->pool, wp->config->name, sizeof(wp->scoreboard->pool)); } return 0; }
int fpm_scoreboard_init_main() /* {{{ */ { struct fpm_worker_pool_s *wp; unsigned int i; #ifdef HAVE_TIMES #if (defined(HAVE_SYSCONF) && defined(_SC_CLK_TCK)) fpm_scoreboard_tick = sysconf(_SC_CLK_TCK); #else /* _SC_CLK_TCK */ #ifdef HZ fpm_scoreboard_tick = HZ; #else /* HZ */ fpm_scoreboard_tick = 100; #endif /* HZ */ #endif /* _SC_CLK_TCK */ zlog(ZLOG_DEBUG, "got clock tick '%.0f'", fpm_scoreboard_tick); #endif /* HAVE_TIMES */ for (wp = fpm_worker_all_pools; wp; wp = wp->next) { size_t scoreboard_size, scoreboard_nprocs_size; void *shm_mem; if (wp->config->pm_max_children < 1) { zlog(ZLOG_ERROR, "[pool %s] Unable to create scoreboard SHM because max_client is not set", wp->config->name); return -1; } if (wp->scoreboard) { zlog(ZLOG_ERROR, "[pool %s] Unable to create scoreboard SHM because it already exists", wp->config->name); return -1; } scoreboard_size = sizeof(struct fpm_scoreboard_s) + (wp->config->pm_max_children) * sizeof(struct fpm_scoreboard_proc_s *); scoreboard_nprocs_size = sizeof(struct fpm_scoreboard_proc_s) * wp->config->pm_max_children; shm_mem = fpm_shm_alloc(scoreboard_size + scoreboard_nprocs_size); if (!shm_mem) { return -1; } wp->scoreboard = shm_mem; wp->scoreboard->nprocs = wp->config->pm_max_children; shm_mem += scoreboard_size; for (i = 0; i < wp->scoreboard->nprocs; i++, shm_mem += sizeof(struct fpm_scoreboard_proc_s)) { wp->scoreboard->procs[i] = shm_mem; } wp->scoreboard->pm = wp->config->pm; wp->scoreboard->start_epoch = time(NULL); strlcpy(wp->scoreboard->pool, wp->config->name, sizeof(wp->scoreboard->pool)); } return 0; }