int smpd_init_printf(void) { char * envstr; static int initialized = 0; char str[1024]; int len; if (initialized) return 0; initialized = 1; smpd_process.dbg_state = SMPD_DBG_STATE_ERROUT; envstr = getenv("SMPD_DBG_OUTPUT"); if (envstr != NULL) { if (strstr(envstr, "stdout")) smpd_process.dbg_state |= SMPD_DBG_STATE_STDOUT; if (strstr(envstr, "log")) smpd_process.dbg_state |= SMPD_DBG_STATE_LOGFILE; if (strstr(envstr, "rank")) smpd_process.dbg_state |= SMPD_DBG_STATE_PREPEND_RANK; if (strstr(envstr, "trace")) smpd_process.dbg_state |= SMPD_DBG_STATE_TRACE; if (strstr(envstr, "all")) smpd_process.dbg_state = SMPD_DBG_STATE_ALL; } if (smpd_option_on("log")) smpd_process.dbg_state |= SMPD_DBG_STATE_LOGFILE; if (smpd_option_on("prepend_rank")) smpd_process.dbg_state |= SMPD_DBG_STATE_PREPEND_RANK; if (smpd_option_on("trace")) smpd_process.dbg_state |= SMPD_DBG_STATE_TRACE; if (smpd_process.dbg_state & SMPD_DBG_STATE_LOGFILE) { envstr = getenv("SMPD_DBG_LOG_FILENAME"); if (envstr) { strcpy(smpd_process.dbg_filename, envstr); } else { if (smpd_get_smpd_data("logfile", smpd_process.dbg_filename, SMPD_MAX_FILENAME) != SMPD_SUCCESS) { smpd_process.dbg_state ^= SMPD_DBG_STATE_LOGFILE; } } if (smpd_get_smpd_data("max_logfile_size", str, 1024) == SMPD_SUCCESS) { smpd_process.dbg_file_size = atoi(str); } envstr = getenv("SMPD_MAX_LOG_FILE_SIZE"); if (envstr) { len = atoi(envstr); if (len > 0) { smpd_process.dbg_file_size = atoi(envstr); } } } #ifdef HAVE_WINDOWS_H if (!smpd_process.bOutputInitialized) { smpd_process.hOutputMutex = CreateMutex(NULL, FALSE, SMPD_OUTPUT_MUTEX_NAME); smpd_process.bOutputInitialized = TRUE; } #endif return SMPD_SUCCESS; }
int smpd_get_default_hosts() { char hosts[8192]; char *host; char *ncpu; smpd_host_node_t *cur_host, *iter; #ifdef HAVE_WINDOWS_H DWORD len; #else int dynamic = SMPD_FALSE; char myhostname[SMPD_MAX_HOST_LENGTH]; int found; #endif smpd_enter_fn(FCNAME); if (smpd_process.default_host_list != NULL && smpd_process.cur_default_host != NULL) { smpd_dbg_printf("default list already populated, returning success.\n"); smpd_exit_fn(FCNAME); return SMPD_SUCCESS; } if (smpd_get_smpd_data("hosts", hosts, 8192) != SMPD_SUCCESS) { #ifdef HAVE_WINDOWS_H len = 8192; /*if (GetComputerName(hosts, &len))*/ if (GetComputerNameEx(ComputerNameDnsFullyQualified, hosts, &len)) { smpd_process.default_host_list = (smpd_host_node_t*)MPIU_Malloc(sizeof(smpd_host_node_t)); if (smpd_process.default_host_list == NULL) { smpd_exit_fn(FCNAME); return SMPD_FAIL; } strcpy(smpd_process.default_host_list->host, hosts); smpd_process.default_host_list->alt_host[0] = '\0'; smpd_process.default_host_list->nproc = 1; smpd_process.default_host_list->connected = SMPD_FALSE; smpd_process.default_host_list->connect_cmd_tag = -1; smpd_process.default_host_list->next = smpd_process.default_host_list; smpd_process.default_host_list->left = NULL; smpd_process.default_host_list->right = NULL; smpd_process.cur_default_host = smpd_process.default_host_list; smpd_exit_fn(FCNAME); return SMPD_SUCCESS; } smpd_exit_fn(FCNAME); return SMPD_FAIL; #else if (smpd_option_on("no_dynamic_hosts")) { if (smpd_get_hostname(myhostname, SMPD_MAX_HOST_LENGTH) == SMPD_SUCCESS) { smpd_process.default_host_list = (smpd_host_node_t*)MPIU_Malloc(sizeof(smpd_host_node_t)); if (smpd_process.default_host_list == NULL) { smpd_exit_fn(FCNAME); return SMPD_FAIL; } strcpy(smpd_process.default_host_list->host, myhostname); smpd_process.default_host_list->alt_host[0] = '\0'; smpd_process.default_host_list->nproc = 1; smpd_process.default_host_list->connected = SMPD_FALSE; smpd_process.default_host_list->connect_cmd_tag = -1; smpd_process.default_host_list->next = smpd_process.default_host_list; smpd_process.default_host_list->left = NULL; smpd_process.default_host_list->right = NULL; smpd_process.cur_default_host = smpd_process.default_host_list; smpd_exit_fn(FCNAME); return SMPD_SUCCESS; } smpd_exit_fn(FCNAME); return SMPD_FAIL; } smpd_lock_smpd_data(); if (smpd_get_smpd_data(SMPD_DYNAMIC_HOSTS_KEY, hosts, 8192) != SMPD_SUCCESS) { smpd_unlock_smpd_data(); if (smpd_get_hostname(hosts, 8192) == 0) { smpd_process.default_host_list = (smpd_host_node_t*)MPIU_Malloc(sizeof(smpd_host_node_t)); if (smpd_process.default_host_list == NULL) { smpd_exit_fn(FCNAME); return SMPD_FAIL; } strcpy(smpd_process.default_host_list->host, hosts); smpd_process.default_host_list->alt_host[0] = '\0'; smpd_process.default_host_list->nproc = 1; smpd_process.default_host_list->connected = SMPD_FALSE; smpd_process.default_host_list->connect_cmd_tag = -1; smpd_process.default_host_list->next = smpd_process.default_host_list; smpd_process.default_host_list->left = NULL; smpd_process.default_host_list->right = NULL; smpd_process.cur_default_host = smpd_process.default_host_list; /* add this host to the dynamic_hosts key */ strcpy(myhostname, hosts); smpd_lock_smpd_data(); hosts[0] = '\0'; smpd_get_smpd_data(SMPD_DYNAMIC_HOSTS_KEY, hosts, 8192); if (strlen(hosts) > 0) { /* FIXME this could overflow */ strcat(hosts, " "); strcat(hosts, myhostname); } else { strcpy(hosts, myhostname); } smpd_set_smpd_data(SMPD_DYNAMIC_HOSTS_KEY, hosts); smpd_unlock_smpd_data(); smpd_exit_fn(FCNAME); return SMPD_SUCCESS; } smpd_exit_fn(FCNAME); return SMPD_FAIL; } smpd_unlock_smpd_data(); if (smpd_get_hostname(myhostname, SMPD_MAX_HOST_LENGTH) != 0) { dynamic = SMPD_FALSE; myhostname[0] = '\0'; } else { dynamic = SMPD_TRUE; } #endif } /* FIXME: Insert code here to parse a compressed host string */ /* For now, just use a space separated list of host names */ host = strtok(hosts, " \t\r\n"); while (host) { cur_host = (smpd_host_node_t*)MPIU_Malloc(sizeof(smpd_host_node_t)); if (cur_host != NULL) { /*printf("default host: %s\n", host);*/ strcpy(cur_host->host, host); cur_host->alt_host[0] = '\0'; cur_host->nproc = 1; ncpu = strstr(cur_host->host, ":"); if (ncpu) { *ncpu = '\0'; ncpu++; cur_host->nproc = atoi(ncpu); if (cur_host->nproc < 1) cur_host->nproc = 1; } cur_host->connected = SMPD_FALSE; cur_host->connect_cmd_tag = -1; cur_host->next = NULL; cur_host->left = NULL; cur_host->right = NULL; if (smpd_process.default_host_list == NULL) { smpd_process.default_host_list = cur_host; } else { iter = smpd_process.default_host_list; while (iter->next) iter = iter->next; iter->next = cur_host; } } host = strtok(NULL, " \t\r\n"); } if (smpd_process.default_host_list) { #ifndef HAVE_WINDOWS_H if (dynamic) { found = SMPD_FALSE; iter = smpd_process.default_host_list; while (iter) { if (strcmp(iter->host, myhostname) == 0) { found = SMPD_TRUE; break; } iter = iter->next; } if (!found) { /* add this host to the dynamic_hosts key */ smpd_lock_smpd_data(); hosts[0] = '\0'; smpd_get_smpd_data(SMPD_DYNAMIC_HOSTS_KEY, hosts, 8192); if (strlen(hosts) > 0) { /* FIXME this could overflow */ strcat(hosts, " "); strcat(hosts, myhostname); } else { strcpy(hosts, myhostname); } smpd_set_smpd_data(SMPD_DYNAMIC_HOSTS_KEY, hosts); smpd_unlock_smpd_data(); } } #endif /* make the default list into a ring */ iter = smpd_process.default_host_list; while (iter->next) iter = iter->next; iter->next = smpd_process.default_host_list; /* point the cur_default_host to the first node in the ring */ smpd_process.cur_default_host = smpd_process.default_host_list; } smpd_exit_fn(FCNAME); return SMPD_SUCCESS; }