📄 smpd_session.c
字号:
{ if (n < maxlen) { strcpy(str, test); smpd_exit_fn(FCNAME); return SMPD_TRUE; } smpd_err_printf("buffer provided is too small: %d provided, %d needed\n", maxlen, n); smpd_exit_fn(FCNAME); return SMPD_FALSE; } token = strtok(NULL, ";:"); } smpd_exit_fn(FCNAME); return SMPD_FALSE;#endif}#ifndef HAVE_WINDOWS_Hsmpd_sig_fn_t *smpd_signal( int signo, smpd_sig_fn_t func ){ struct sigaction act, oact; act.sa_handler = func; sigemptyset( &act.sa_mask ); act.sa_flags = 0; if ( signo == SIGALRM ) {#ifdef SA_INTERRUPT act.sa_flags |= SA_INTERRUPT; /* SunOS 4.x */#endif } else {#ifdef SA_RESTART act.sa_flags |= SA_RESTART; /* SVR4, 4.4BSD */#endif } if ( sigaction( signo,&act, &oact ) < 0 ) return ( SIG_ERR ); return( oact.sa_handler );}#endif#undef FCNAME#define FCNAME "smpd_create_process_struct"int smpd_create_process_struct(int rank, smpd_process_t **process_ptr){ int result; smpd_process_t *p; static int cur_id = 0; smpd_enter_fn(FCNAME); p = (smpd_process_t*)MPIU_Malloc(sizeof(smpd_process_t)); if (p == NULL) { *process_ptr = NULL; smpd_exit_fn(FCNAME); return SMPD_FAIL; } p->id = cur_id++; /* MT - If smpd is to be thread safe, this will have to be changed */ p->rank = rank; p->nproc = 1; p->kvs_name[0] = '\0'; p->domain_name[0] = '\0'; p->exe[0] = '\0'; p->env[0] = '\0'; p->dir[0] = '\0'; p->path[0] = '\0'; p->clique[0] = '\0'; p->err_msg[0] = '\0'; p->stdin_write_list = NULL; result = smpd_create_context(SMPD_CONTEXT_STDIN, smpd_process.set, MPIDU_SOCK_INVALID_SOCK, -1, &p->in); if (result != SMPD_SUCCESS) { MPIU_Free(p); *process_ptr = NULL; smpd_err_printf("unable to create stdin context.\n"); smpd_exit_fn(FCNAME); return SMPD_FAIL; } result = smpd_create_context(SMPD_CONTEXT_STDOUT, smpd_process.set, MPIDU_SOCK_INVALID_SOCK, -1, &p->out); if (result != SMPD_SUCCESS) { MPIU_Free(p); *process_ptr = NULL; smpd_err_printf("unable to create stdout context.\n"); smpd_exit_fn(FCNAME); return SMPD_FAIL; } result = smpd_create_context(SMPD_CONTEXT_STDERR, smpd_process.set, MPIDU_SOCK_INVALID_SOCK, -1, &p->err); if (result != SMPD_SUCCESS) { MPIU_Free(p); *process_ptr = NULL; smpd_err_printf("unable to create stderr context.\n"); smpd_exit_fn(FCNAME); return SMPD_FAIL; } result = smpd_create_context(SMPD_CONTEXT_PMI, smpd_process.set, MPIDU_SOCK_INVALID_SOCK, -1, &p->pmi); if (result != SMPD_SUCCESS) { MPIU_Free(p); *process_ptr = NULL; smpd_err_printf("unable to create pmi context.\n"); smpd_exit_fn(FCNAME); return SMPD_FAIL; } p->in->rank = rank; p->out->rank = rank; p->err->rank = rank; p->num_valid_contexts = 3; p->context_refcount = 0; p->exitcode = 0; p->in->process = p; p->out->process = p; p->err->process = p; p->pmi->process = p; p->next = NULL; p->spawned = 0; p->local_process = SMPD_TRUE; p->is_singleton_client = SMPD_FALSE; p->map_list = NULL; p->appnum = 0; *process_ptr = p; smpd_exit_fn(FCNAME); return SMPD_SUCCESS;}#undef FCNAME#define FCNAME "smpd_process_to_string"SMPD_BOOL smpd_process_to_string(char **str_pptr, int *len_ptr, int indent, smpd_process_t *process){ char indent_str[SMPD_MAX_TO_STRING_INDENT+1]; smpd_enter_fn(FCNAME); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } if (indent > SMPD_MAX_TO_STRING_INDENT) { indent = SMPD_MAX_TO_STRING_INDENT; } memset(indent_str, ' ', indent); indent_str[indent] = '\0'; smpd_snprintf_update(str_pptr, len_ptr, "%sid: %d\n", indent_str, process->id); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%srank: %d\n", indent_str, process->rank); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%sexe: %s\n", indent_str, process->exe); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%sdir: %s\n", indent_str, process->dir); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%senv: %s\n", indent_str, process->env); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%spath: %s\n", indent_str, process->path); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%spid: %d\n", indent_str, process->pid); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%sexitcode: %d\n", indent_str, process->exitcode); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%scontext_refcount: %s\n", indent_str, process->context_refcount); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%serr_msg: %s\n", indent_str, process->err_msg); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%snum_valid_contexts: %d\n", indent_str, process->num_valid_contexts); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%s in: %p\n", indent_str, process->in); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%s out: %p\n", indent_str, process->out); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%s err: %p\n", indent_str, process->err); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%s pmi: %p\n", indent_str, process->pmi); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%skvs_name: %s\n", indent_str, process->kvs_name); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%snproc: %d\n", indent_str, process->nproc); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; }#ifdef HAVE_WINDOWS_H smpd_snprintf_update(str_pptr, len_ptr, "%swait: %p:%p\n", indent_str, process->wait.hProcess, process->wait.hThread);#else smpd_snprintf_update(str_pptr, len_ptr, "%swait: %d\n", indent_str, (int)process->wait);#endif if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } smpd_snprintf_update(str_pptr, len_ptr, "%snext: %p\n", indent_str, process->next); if (*len_ptr < 1) { smpd_exit_fn(FCNAME); return SMPD_FALSE; } /* this misses the case of an exact fit */ smpd_exit_fn(FCNAME); return SMPD_TRUE;}#undef FCNAME#define FCNAME "smpd_free_process_struct"int smpd_free_process_struct(smpd_process_t *process){ smpd_enter_fn(FCNAME); if (process == NULL) { smpd_dbg_printf("smpd_free_process_struct passed NULL process pointer.\n"); smpd_exit_fn(FCNAME); return SMPD_SUCCESS; } if (process->in) smpd_free_context(process->in); process->in = NULL; if (process->out) smpd_free_context(process->out); process->out = NULL; if (process->err) smpd_free_context(process->err); process->err = NULL; if (process->pmi) smpd_free_context(process->pmi); process->pmi = NULL; process->dir[0] = '\0'; process->env[0] = '\0'; process->exe[0] = '\0'; process->path[0] = '\0'; process->pid = -1; process->rank = -1; process->next = NULL; MPIU_Free(process); smpd_exit_fn(FCNAME); return SMPD_SUCCESS;}#undef FCNAME#define FCNAME "smpd_interpret_session_header"int smpd_interpret_session_header(char *str){ char temp_str[100]; smpd_enter_fn(FCNAME); smpd_dbg_printf("interpreting session header: \"%s\"\n", str); /* get my id */ if (MPIU_Str_get_string_arg(str, "id", temp_str, 100) == MPIU_STR_SUCCESS) { smpd_dbg_printf(" id = %s\n", temp_str); smpd_process.id = atoi(temp_str); if (smpd_process.id < 0) { smpd_err_printf("invalid id passed in session header: %d\n", smpd_process.id); smpd_process.id = 0; } } /* get my parent's id */ if (MPIU_Str_get_string_arg(str, "parent", temp_str, 100) == MPIU_STR_SUCCESS) { smpd_dbg_printf(" parent = %s\n", temp_str); smpd_process.parent_id = atoi(temp_str); if (smpd_process.parent_id < 0) { smpd_err_printf("invalid parent id passed in session header: %d\n", smpd_process.parent_id); smpd_process.parent_id = -1; } } /* get my level */ if (MPIU_Str_get_string_arg(str, "level", temp_str, 100) == MPIU_STR_SUCCESS) { smpd_dbg_printf(" level = %s\n", temp_str); smpd_process.level = atoi(temp_str); if (smpd_process.level < 0) { smpd_err_printf("invalid session level passed in session header: %d\n", smpd_process.level); smpd_process.level = 0; } } smpd_exit_fn(FCNAME); return SMPD_SUCCESS;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -