Esempio n. 1
0
static na_return_t
ack_expected_recv_cb(const struct na_cb_info *callback_info)
{
    struct na_test_params *params = (struct na_test_params *) callback_info->arg;
    na_return_t ret = NA_SUCCESS;
    unsigned int i;
    na_bool_t error = 0;

    if (callback_info->ret == NA_CANCELED) {
        fprintf(stderr, "Error: NA_Msg_recv_expected() was canceled\n");
        return NA_PROTOCOL_ERROR;
    } else {
        printf("NA_Msg_recv_expected() was not canceled\n");
    }

    if (callback_info->ret != NA_SUCCESS) {
        return ret;
    }

    printf("Bulk transfer complete\n");

    /* Check bulk buf */
    for (i = 0; i < params->bulk_size; i++) {
        if ((na_size_t) params->bulk_buf[i] != 0) {
            printf("Error detected in bulk transfer, bulk_buf[%u] = %d,\t"
                " was expecting %d!\n", i, params->bulk_buf[i], 0);
            error = 1;
            break;
        }
    }
    if (!error)
        printf("Successfully reset %zu bytes!\n",
            params->bulk_size * sizeof(int));

    ret = NA_Mem_deregister(params->na_class, params->local_mem_handle);
    if (ret != NA_SUCCESS) {
        fprintf(stderr, "Could not unregister memory\n");
        return ret;
    }

    ret = NA_Mem_handle_free(params->na_class, params->local_mem_handle);
    if (ret != NA_SUCCESS) {
        fprintf(stderr, "Could not free memory handle\n");
        return ret;
    }

    test_done_g = 1;

    return ret;
}
Esempio n. 2
0
static int
ack_expected_recv_cb(const struct na_cb_info *callback_info)
{
    struct na_test_params *params = (struct na_test_params *) callback_info->arg;
    na_return_t ret = NA_SUCCESS;
    unsigned int i;
    na_bool_t error = 0;

    if (callback_info->ret != NA_SUCCESS) {
        return ret;
    }

    printf("Bulk transfer complete\n");

    /* Check bulk buf */
    for (i = 0; i < params->bulk_size; i++) {
        if (params->bulk_buf[i] != 0) {
            printf("Error detected in bulk transfer, bulk_buf[%u] = %u,\t"
                    " was expecting %d!\n", i, params->bulk_buf[i], 0);
            error = 1;
            break;
        }
    }
    if (!error) printf("Successfully reset %zu bytes!\n",
        (size_t) params->bulk_size * sizeof(int));

    ret = NA_Mem_deregister(params->na_class, params->local_mem_handle);
    if (ret != NA_SUCCESS) {
        NA_LOG_ERROR("Could not deregister memory");
        goto done;
    }

    ret = NA_Mem_handle_free(params->na_class, params->local_mem_handle);
    if (ret != NA_SUCCESS) {
        NA_LOG_ERROR("Could not free memory handle");
        goto done;
    }

    test_bulk_done_g = 1;

done:
    return ret;
}
Esempio n. 3
0
/*---------------------------------------------------------------------------*/
static hg_return_t
hg_bulk_free(struct hg_bulk *hg_bulk)
{
    hg_return_t ret = HG_SUCCESS;
    unsigned int i;

    if (!hg_bulk) goto done;

    if (hg_atomic_decr32(&hg_bulk->ref_count)) {
        /* Cannot free yet */
        goto done;
    }

    if (hg_bulk->na_mem_handles) {
        na_class_t *na_class = HG_Core_class_get_na(hg_bulk->hg_class);

        /* Unregister/free NA memory handles */
        if (hg_bulk->segment_published) {
            for (i = 0; i < hg_bulk->na_mem_handle_count; i++) {
                na_return_t na_ret;

                if (!hg_bulk->na_mem_handles[i])
                    continue;

                na_ret = NA_Mem_unpublish(na_class, hg_bulk->na_mem_handles[i]);
                if (na_ret != NA_SUCCESS) {
                    HG_LOG_ERROR("NA_Mem_unpublish failed");
                }
            }
            hg_bulk->segment_published = HG_FALSE;
        }

        for (i = 0; i < hg_bulk->na_mem_handle_count; i++) {
            na_return_t na_ret;

            if (!hg_bulk->na_mem_handles[i])
                continue;

            na_ret = NA_Mem_deregister(na_class, hg_bulk->na_mem_handles[i]);
            if (na_ret != NA_SUCCESS) {
                HG_LOG_ERROR("NA_Mem_deregister failed");
            }

            na_ret = NA_Mem_handle_free(na_class, hg_bulk->na_mem_handles[i]);
            if (na_ret != NA_SUCCESS) {
                HG_LOG_ERROR("NA_Mem_handle_free failed");
            }
            hg_bulk->na_mem_handles[i] = NA_MEM_HANDLE_NULL;
        }

        free(hg_bulk->na_mem_handles);
    }

    /* Free segments */
    if (hg_bulk->segment_alloc) {
        for (i = 0; i < hg_bulk->segment_count; i++) {
            free((void *) hg_bulk->segments[i].address);
        }
    }
    free(hg_bulk->segments);
    free(hg_bulk);

done:
    return ret;
}