コード例 #1
0
ファイル: error.c プロジェクト: annu13/pmix
void pmix_errhandler_invoke(pmix_status_t status,
                            pmix_proc_t procs[], size_t nprocs,
                            pmix_info_t info[], size_t ninfo)
{
    /* We need to parse thru each registered handler and determine
       which one to call for the specific error */
    int matched_errregs[PMIX_MAX_ERROR_REGISTRATIONS];
    int i, nmatched = 0;
    unsigned int j,k;
    bool exact_match = false;
    int allerrhandler_ind = -1;
    pmix_error_reg_info_t *errreg;
    for (i = 0; i < pmix_pointer_array_get_size(&pmix_globals.errregs) && !exact_match; i++) {
        errreg = (pmix_error_reg_info_t*) pmix_pointer_array_get_item (&pmix_globals.errregs, i);
        if(0 == errreg->ninfo) {
            // this is a general err handler we will call it if there is no better match
            allerrhandler_ind = i;
        } else {
            /* match error name key first */
            for(j = 0; j < errreg->ninfo; j++) {
                if ((0 == strcmp(errreg->info[j].key, PMIX_ERROR_NAME)) &&
                        (status == errreg->info[j].value.data.int32)) {
                     matched_errregs[0] = i;
                     nmatched = 1;
                     exact_match = true;
                     break;
                } else {
                    for (k = 0; k < errreg->ninfo; k++) {
                        if ((0 == strcmp(errreg->info[j].key, info[k].key)) &&
                            (pmix_value_cmp(&errreg->info[j].value, &info[k].value))) {
                            matched_errregs[nmatched++] = 1;
                            break;
                        }
                    }
                }
            }
        }
    }
    for ( i =0 ;i < nmatched; i++) {
        errreg = (pmix_error_reg_info_t*) pmix_pointer_array_get_item (&pmix_globals.errregs,
                                                                        matched_errregs[i]);
        errreg->errhandler (status, procs, nprocs, info, ninfo);
    }
    if ( 0 == nmatched && 0 <= allerrhandler_ind) {
        errreg = (pmix_error_reg_info_t*) pmix_pointer_array_get_item (&pmix_globals.errregs,
                  allerrhandler_ind);
        errreg->errhandler (status, procs, nprocs, info, ninfo);
    }
}
コード例 #2
0
ファイル: error.c プロジェクト: annu13/pmix
pmix_status_t pmix_lookup_errhandler(pmix_notification_fn_t err,
                                     int *index)
{
    int i;
    pmix_status_t rc = PMIX_ERR_NOT_FOUND;
    pmix_error_reg_info_t *errreg;
    for (i = 0; i < pmix_pointer_array_get_size(&pmix_globals.errregs) ; i++) {
        errreg = (pmix_error_reg_info_t*) pmix_pointer_array_get_item (&pmix_globals.errregs, i);
        if(err == errreg->errhandler) {
            *index = i;
            rc = PMIX_SUCCESS;
            break;
        }
    }
    return rc;
}
コード例 #3
0
int pmix_mca_base_var_group_finalize (void)
{
    pmix_object_t *object;
    int size, i;

    if (pmix_mca_base_var_group_initialized) {
        size = pmix_pointer_array_get_size(&pmix_mca_base_var_groups);
        for (i = 0 ; i < size ; ++i) {
            object = pmix_pointer_array_get_item (&pmix_mca_base_var_groups, i);
            if (NULL != object) {
                PMIX_RELEASE(object);
            }
        }
        PMIX_DESTRUCT(&pmix_mca_base_var_groups);
        PMIX_DESTRUCT(&pmix_mca_base_var_group_index_hash);
        pmix_mca_base_var_group_count = 0;
        pmix_mca_base_var_group_initialized = false;
    }

    return PMIX_SUCCESS;
}
コード例 #4
0
pmix_status_t pmix_bfrop_close(void)
{
    int32_t i;

    if (!pmix_bfrop_initialized) {
        return PMIX_SUCCESS;
    }
    pmix_bfrop_initialized = false;

    for (i = 0 ; i < pmix_pointer_array_get_size(&pmix_bfrop_types) ; ++i) {
        pmix_bfrop_type_info_t *info = (pmix_bfrop_type_info_t*)pmix_pointer_array_get_item(&pmix_bfrop_types, i);
        if (NULL != info) {
            pmix_pointer_array_set_item(&pmix_bfrop_types, i, NULL);
            PMIX_RELEASE(info);
        }
    }

    PMIX_DESTRUCT(&pmix_bfrop_types);

    return PMIX_SUCCESS;
}