本文整理汇总了C++中HYDU_ERR_POP函数的典型用法代码示例。如果您正苦于以下问题:C++ HYDU_ERR_POP函数的具体用法?C++ HYDU_ERR_POP怎么用?C++ HYDU_ERR_POP使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了HYDU_ERR_POP函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: fn_name_publish
static HYD_status fn_name_publish(int fd, int pid, int pgid, char *args[])
{
struct HYD_string_stash stash;
char *cmd, *thrid, *val, *name = NULL, *port = NULL;
int token_count, success;
struct HYD_pmcd_token *tokens = NULL;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
status = HYD_pmcd_pmi_args_to_tokens(args, &tokens, &token_count);
HYDU_ERR_POP(status, "unable to convert args to tokens\n");
thrid = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "thrid");
if ((val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "name")) == NULL)
HYDU_ERR_POP(status, "cannot find token: name\n");
name = HYDU_strdup(val);
if ((val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "port")) == NULL)
HYDU_ERR_POP(status, "cannot find token: port\n");
port = HYDU_strdup(val);
status = HYD_pmcd_pmi_publish(name, port, &success);
HYDU_ERR_POP(status, "error publishing service\n");
HYD_STRING_STASH_INIT(stash);
HYD_STRING_STASH(stash, HYDU_strdup("cmd=name-publish-response;"), status);
if (thrid) {
HYD_STRING_STASH(stash, HYDU_strdup("thrid="), status);
HYD_STRING_STASH(stash, HYDU_strdup(thrid), status);
HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
}
if (!success) {
HYD_STRING_STASH(stash, HYDU_strdup("rc=1;errmsg=duplicate_service_"), status);
HYD_STRING_STASH(stash, HYDU_strdup(name), status);
HYD_STRING_STASH(stash, HYDU_strdup(";"), status);
}
else
HYD_STRING_STASH(stash, HYDU_strdup("rc=0;"), status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
HYDU_FREE(cmd);
fn_exit:
if (tokens)
HYD_pmcd_pmi_free_tokens(tokens, token_count);
if (name)
HYDU_FREE(name);
if (port)
HYDU_FREE(port);
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例2: fn_put
static HYD_status fn_put(int fd, int pid, int pgid, char *args[])
{
struct HYD_proxy *proxy;
struct HYD_pmcd_pmi_pg_scratch *pg_scratch;
struct HYD_pmcd_token *tokens;
int token_count, i, ret;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
status = HYD_pmcd_pmi_args_to_tokens(args, &tokens, &token_count);
HYDU_ERR_POP(status, "unable to convert args to tokens\n");
proxy = HYD_pmcd_pmi_find_proxy(fd);
HYDU_ASSERT(proxy, status);
pg_scratch = (struct HYD_pmcd_pmi_pg_scratch *) proxy->pg->pg_scratch;
for (i = 0; i < token_count; i++) {
status = HYD_pmcd_pmi_add_kvs(tokens[i].key, tokens[i].val, pg_scratch->kvs, &ret);
HYDU_ERR_POP(status, "unable to add keypair to kvs\n");
}
fn_exit:
HYD_pmcd_pmi_free_tokens(tokens, token_count);
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例3: fn_abort
static HYD_status fn_abort(int fd, int pid, int pgid, char *args[])
{
int token_count;
struct HYD_pmcd_token *tokens;
/* set a default exit code of 1 */
int exitcode = 1;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
status = HYD_pmcd_pmi_args_to_tokens(args, &tokens, &token_count);
HYDU_ERR_POP(status, "unable to convert args to tokens\n");
if (HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "exitcode") == NULL)
HYDU_ERR_POP(status, "cannot find token: exitcode\n");
exitcode = atoi(HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "exitcode"));
fn_exit:
/* clean everything up and exit */
status = HYDT_bsci_wait_for_completion(0);
exit(exitcode);
/* never get here */
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例4: HYDU_FUNC_ENTER
char *HYDU_find_full_path(const char *execname)
{
char *tmp[HYD_NUM_TMP_STRINGS] = { NULL }, *path = NULL, *test_path = NULL;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
status = HYDU_find_in_path(execname, &test_path);
HYDU_ERR_POP(status, "error while searching for executable in user path\n");
if (test_path) {
tmp[0] = MPL_strdup(test_path);
tmp[1] = MPL_strdup(execname);
tmp[2] = NULL;
status = HYDU_str_alloc_and_join(tmp, &path);
HYDU_ERR_POP(status, "error joining strings\n");
}
fn_exit:
HYDU_free_strlist(tmp);
if (test_path)
MPL_free(test_path);
HYDU_FUNC_EXIT();
return path;
fn_fail:
goto fn_exit;
}
示例5: cmd_response
static HYD_status cmd_response(int fd, int pid, const char *cmd)
{
struct HYD_pmcd_hdr hdr;
int sent, closed;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
HYD_pmcd_init_header(&hdr);
hdr.cmd = PMI_RESPONSE;
hdr.pid = pid;
hdr.pmi_version = 1;
hdr.buflen = strlen(cmd);
status = HYDU_sock_write(fd, &hdr, sizeof(hdr), &sent, &closed);
HYDU_ERR_POP(status, "unable to send PMI_RESPONSE header to proxy\n");
HYDU_ASSERT(!closed, status);
if (HYD_server_info.user_global.debug) {
HYDU_dump(stdout, "PMI response to fd %d pid %d: %s", fd, pid, cmd);
}
status = HYDU_sock_write(fd, cmd, strlen(cmd), &sent, &closed);
HYDU_ERR_POP(status, "unable to send response to command\n");
HYDU_ASSERT(!closed, status);
fn_exit:
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例6: HYDU_send_strlist
HYD_status HYDU_send_strlist(int fd, char **strlist)
{
int i, list_len, len;
int sent, closed;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
/* Check how many arguments we have */
list_len = HYDU_strlist_lastidx(strlist);
status = HYDU_sock_write(fd, &list_len, sizeof(int), &sent, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "unable to write data to proxy\n");
HYDU_ASSERT(!closed, status);
/* Convert the string list to parseable data and send */
for (i = 0; strlist[i]; i++) {
len = strlen(strlist[i]) + 1;
status = HYDU_sock_write(fd, &len, sizeof(int), &sent, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "unable to write data to proxy\n");
HYDU_ASSERT(!closed, status);
status = HYDU_sock_write(fd, strlist[i], len, &sent, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "unable to write data to proxy\n");
HYDU_ASSERT(!closed, status);
}
fn_exit:
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例7: get_abs_wd
static HYD_status get_abs_wd(const char *wd, char **abs_wd)
{
int ret;
char *cwd;
HYD_status status = HYD_SUCCESS;
if (wd == NULL) {
*abs_wd = NULL;
goto fn_exit;
}
if (wd[0] != '.') {
*abs_wd = (char *) wd;
goto fn_exit;
}
cwd = HYDU_getcwd();
ret = chdir(wd);
if (ret < 0)
HYDU_ERR_POP(status, "error calling chdir\n");
*abs_wd = HYDU_getcwd();
ret = chdir(cwd);
if (ret < 0)
HYDU_ERR_POP(status, "error calling chdir\n");
fn_exit:
return status;
fn_fail:
goto fn_exit;
}
示例8: send_cmd_downstream
static HYD_status send_cmd_downstream(int fd, const char *cmd)
{
char cmdlen[7];
int sent, closed;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
MPL_snprintf(cmdlen, 7, "%6u", (unsigned) strlen(cmd));
status = HYDU_sock_write(fd, cmdlen, 6, &sent, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error writing PMI line\n");
/* FIXME: We cannot abort when we are not able to send data
* downstream. The upper layer needs to handle this based on
* whether we want to abort or not.*/
HYDU_ASSERT(!closed, status);
if (HYD_pmcd_pmip.user_global.debug) {
HYDU_dump(stdout, "PMI response: %s\n", cmd);
}
status = HYDU_sock_write(fd, cmd, strlen(cmd), &sent, &closed, HYDU_SOCK_COMM_MSGWAIT);
HYDU_ERR_POP(status, "error writing PMI line\n");
HYDU_ASSERT(!closed, status);
fn_exit:
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例9: alloc_fwd_hash
static HYD_status alloc_fwd_hash(struct fwd_hash **fwd_hash, int in, int out)
{
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
HYDU_MALLOC_OR_JUMP(*fwd_hash, struct fwd_hash *, sizeof(struct fwd_hash), status);
(*fwd_hash)->in = in;
(*fwd_hash)->out = out;
(*fwd_hash)->buf_offset = 0;
(*fwd_hash)->buf_count = 0;
(*fwd_hash)->next = NULL;
status = HYDU_sock_set_nonblock(in);
HYDU_ERR_POP(status, "unable to set out-socket to non-blocking\n");
status = HYDU_sock_set_nonblock(out);
HYDU_ERR_POP(status, "unable to set out-socket to non-blocking\n");
fn_exit:
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例10: fn_info_putnodeattr
static HYD_status fn_info_putnodeattr(int fd, char *args[])
{
struct HYD_string_stash stash;
char *key, *val, *thrid, *cmd;
struct HYD_pmcd_token *tokens = NULL;
int token_count, ret;
struct HYD_pmcd_pmi_v2_reqs *req;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
status = HYD_pmcd_pmi_args_to_tokens(args, &tokens, &token_count);
HYDU_ERR_POP(status, "unable to convert args to tokens\n");
key = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "key");
HYDU_ERR_CHKANDJUMP(status, key == NULL, HYD_INTERNAL_ERROR, "unable to find key token\n");
val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "value");
HYDU_ERR_CHKANDJUMP(status, val == NULL, HYD_INTERNAL_ERROR, "unable to find value token\n");
thrid = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "thrid");
status = HYD_pmcd_pmi_add_kvs(key, val, HYD_pmcd_pmip.local.kvs, &ret);
HYDU_ERR_POP(status, "unable to put data into kvs\n");
HYD_STRING_STASH_INIT(stash);
HYD_STRING_STASH(stash, MPL_strdup("cmd=info-putnodeattr-response;"), status);
if (thrid) {
HYD_STRING_STASH(stash, MPL_strdup("thrid="), status);
HYD_STRING_STASH(stash, MPL_strdup(thrid), status);
HYD_STRING_STASH(stash, MPL_strdup(";"), status);
}
HYD_STRING_STASH(stash, MPL_strdup("rc="), status);
HYD_STRING_STASH(stash, HYDU_int_to_str(ret), status);
HYD_STRING_STASH(stash, MPL_strdup(";"), status);
HYD_STRING_SPIT(stash, cmd, status);
send_cmd_downstream(fd, cmd);
MPL_free(cmd);
for (req = pending_reqs; req; req = req->next) {
if (!strcmp(req->key, key)) {
/* Poke the progress engine before exiting */
status = poke_progress(key);
HYDU_ERR_POP(status, "poke progress error\n");
break;
}
}
fn_exit:
if (tokens)
HYD_pmcd_pmi_free_tokens(tokens, token_count);
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例11: HYDU_find_in_path
HYD_status HYDU_find_in_path(const char *execname, char **path)
{
char *tmp[HYD_NUM_TMP_STRINGS], *path_loc = NULL, *test_loc, *user_path;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
/* The executable is somewhere in the user's path. Find it. */
if (MPL_env2str("PATH", (const char **) &user_path))
user_path = MPL_strdup(user_path);
if (user_path) { /* If the PATH environment exists */
status = get_abs_wd(strtok(user_path, ";:"), &test_loc);
HYDU_ERR_POP(status, "error getting absolute working dir\n");
do {
tmp[0] = MPL_strdup(test_loc);
tmp[1] = MPL_strdup("/");
tmp[2] = MPL_strdup(execname);
tmp[3] = NULL;
status = HYDU_str_alloc_and_join(tmp, &path_loc);
HYDU_ERR_POP(status, "unable to join strings\n");
HYDU_free_strlist(tmp);
if (exists(path_loc)) {
tmp[0] = MPL_strdup(test_loc);
tmp[1] = MPL_strdup("/");
tmp[2] = NULL;
status = HYDU_str_alloc_and_join(tmp, path);
HYDU_ERR_POP(status, "unable to join strings\n");
HYDU_free_strlist(tmp);
goto fn_exit; /* We are done */
}
MPL_free(path_loc);
path_loc = NULL;
status = get_abs_wd(strtok(NULL, ";:"), &test_loc);
HYDU_ERR_POP(status, "error getting absolute working dir\n");
} while (test_loc);
}
/* There is either no PATH environment or we could not find the
* file in the PATH. Just return an empty path */
*path = MPL_strdup("");
fn_exit:
if (user_path)
MPL_free(user_path);
if (path_loc)
MPL_free(path_loc);
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例12: HYDT_ckpoint_blcr_restart
HYD_status HYDT_ckpoint_blcr_restart(const char *prefix, int pgid, int id, int ckpt_num,
struct HYD_env *envlist, int num_ranks, int ranks[],
int *in, int *out, int *err, int *pid)
{
HYD_status status = HYD_SUCCESS;
int ret;
int context_fd;
cr_restart_handle_t cr_handle;
cr_restart_args_t args;
char filename[256];
char port_str[64];
int port;
HYDU_FUNC_ENTER();
/* create listener socket for stdin/out/err */
status = create_stdinouterr_sock(&port);
HYDU_ERR_POP(status, "failed to create stdin/out/err socket\n");
MPL_snprintf(port_str, sizeof(port_str), "%d", port);
status = HYDU_append_env_to_list(STDINOUTERR_PORT_NAME, port_str, &envlist);
HYDU_ERR_POP(status, "failed to add to env list\n");
status = create_env_file(envlist, num_ranks, ranks);
if (status)
HYDU_ERR_POP(status, "blcr restart\n");
/* open the checkpoint file */
MPL_snprintf(filename, sizeof(filename), "%s/context-num%d-%d-%d", prefix, ckpt_num, pgid,
id);
context_fd = open(filename, O_RDONLY /* | O_LARGEFILE */);
HYDU_ERR_CHKANDJUMP(status, context_fd < 0, HYD_INTERNAL_ERROR, "open failed, %s\n",
strerror(errno));
/* ... initialize the request structure */
cr_initialize_restart_args_t(&args);
args.cr_fd = context_fd;
args.cr_flags = CR_RSTRT_RESTORE_PID;
/* ... issue the request */
ret = cr_request_restart(&args, &cr_handle);
HYDU_ERR_CHKANDJUMP(status, ret, HYD_INTERNAL_ERROR, "cr_request_restart failed, %s\n",
strerror(errno));
ret = close(context_fd);
HYDU_ERR_CHKANDJUMP(status, ret, HYD_INTERNAL_ERROR, "close failed, %s\n",
strerror(errno));
/* get fds for stdin/out/err sockets, and get pids of restarted processes */
status = wait_for_stdinouterr_sockets(num_ranks, ranks, in, out, err, pid);
if (status)
HYDU_ERR_POP(status, "blcr restart\n");
fn_exit:
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例13: handle_pmi_cmd
static HYD_status handle_pmi_cmd(int fd, int pgid, int pid, char *buf, int pmi_version)
{
char **args = NULL, *cmd = NULL;
struct HYD_pmcd_pmi_handle *h;
int i;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
if (pmi_version == 1)
HYD_pmcd_pmi_handle = HYD_pmcd_pmi_v1;
else
HYD_pmcd_pmi_handle = HYD_pmcd_pmi_v2;
if (HYD_server_info.user_global.debug)
HYDU_dump(stdout, "[pgid: %d] got PMI command: %s\n", pgid, buf);
HYDU_MALLOC(args, char **, MAX_PMI_ARGS * sizeof(char *), status);
for (i = 0; i < MAX_PMI_ARGS; i++)
args[i] = NULL;
status = HYD_pmcd_pmi_parse_pmi_cmd(buf, pmi_version, &cmd, args);
HYDU_ERR_POP(status, "unable to parse PMI command\n");
#if defined ENABLE_PROFILING
if (HYD_server_info.enable_profiling)
HYD_server_info.num_pmi_calls++;
#endif /* ENABLE_PROFILING */
h = HYD_pmcd_pmi_handle;
while (h->handler) {
if (!strcmp(cmd, h->cmd)) {
status = h->handler(fd, pid, pgid, args);
HYDU_ERR_POP(status, "PMI handler returned error\n");
break;
}
h++;
}
if (!h->handler) {
/* We don't understand the command */
HYDU_ERR_SETANDJUMP(status, HYD_INTERNAL_ERROR,
"Unrecognized PMI command: %s | cleaning up processes\n", cmd);
}
fn_exit:
if (cmd)
HYDU_FREE(cmd);
if (args) {
HYDU_free_strlist(args);
HYDU_free(args);
}
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}
示例14: add_exec_to_proxy
static HYD_status add_exec_to_proxy(struct HYD_exec *exec, struct HYD_proxy *proxy, int num_procs)
#endif
{
int i;
struct HYD_exec *texec;
HYD_status status = HYD_SUCCESS;
if (proxy->exec_list == NULL) {
status = HYDU_alloc_exec(&proxy->exec_list);
HYDU_ERR_POP(status, "unable to allocate proxy exec\n");
for (i = 0; exec->exec[i]; i++)
proxy->exec_list->exec[i] = HYDU_strdup(exec->exec[i]);
proxy->exec_list->exec[i] = NULL;
proxy->exec_list->wdir = HYDU_strdup(exec->wdir);
proxy->exec_list->proc_count = num_procs;
#if defined(FINEGRAIN_MPI)
proxy->exec_list->nfg = exec->nfg;
proxy->exec_list->start_rank = current_exec_start_rank;
#endif
proxy->exec_list->env_prop = exec->env_prop ? HYDU_strdup(exec->env_prop) : NULL;
proxy->exec_list->user_env = HYDU_env_list_dup(exec->user_env);
proxy->exec_list->appnum = exec->appnum;
}
else {
for (texec = proxy->exec_list; texec->next; texec = texec->next);
status = HYDU_alloc_exec(&texec->next);
HYDU_ERR_POP(status, "unable to allocate proxy exec\n");
texec = texec->next;
for (i = 0; exec->exec[i]; i++)
texec->exec[i] = HYDU_strdup(exec->exec[i]);
texec->exec[i] = NULL;
texec->wdir = HYDU_strdup(exec->wdir);
texec->proc_count = num_procs;
#if defined(FINEGRAIN_MPI)
texec->nfg = exec->nfg;
texec->start_rank = current_exec_start_rank;
#endif
texec->env_prop = exec->env_prop ? HYDU_strdup(exec->env_prop) : NULL;
texec->user_env = HYDU_env_list_dup(exec->user_env);
texec->appnum = exec->appnum;
}
proxy->proxy_process_count += num_procs;
proxy->node->active_processes += num_procs;
fn_exit:
return status;
fn_fail:
goto fn_exit;
}
示例15: fn_publish_name
static HYD_status fn_publish_name(int fd, int pid, int pgid, char *args[])
{
struct HYD_string_stash stash;
char *cmd, *val;
int token_count;
struct HYD_pmcd_token *tokens = NULL;
char *name = NULL, *port = NULL;
int success = 0;
HYD_status status = HYD_SUCCESS;
HYDU_FUNC_ENTER();
status = HYD_pmcd_pmi_args_to_tokens(args, &tokens, &token_count);
HYDU_ERR_POP(status, "unable to convert args to tokens\n");
if ((val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "service")) == NULL)
HYDU_ERR_POP(status, "cannot find token: service\n");
name = MPL_strdup(val);
if ((val = HYD_pmcd_pmi_find_token_keyval(tokens, token_count, "port")) == NULL)
HYDU_ERR_POP(status, "cannot find token: port\n");
port = MPL_strdup(val);
status = HYD_pmcd_pmi_publish(name, port, &success);
HYDU_ERR_POP(status, "error publishing service\n");
HYD_STRING_STASH_INIT(stash);
if (success)
HYD_STRING_STASH(stash, MPL_strdup("cmd=publish_result info=ok rc=0 msg=success\n"),
status);
else
HYD_STRING_STASH(stash,
MPL_strdup("cmd=publish_result info=ok rc=1 msg=key_already_present\n"),
status);
HYD_STRING_SPIT(stash, cmd, status);
status = cmd_response(fd, pid, cmd);
HYDU_ERR_POP(status, "send command failed\n");
MPL_free(cmd);
fn_exit:
if (tokens)
HYD_pmcd_pmi_free_tokens(tokens, token_count);
if (name)
MPL_free(name);
if (port)
MPL_free(port);
HYDU_FUNC_EXIT();
return status;
fn_fail:
goto fn_exit;
}