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; }
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; }
/*---------------------------------------------------------------------------*/ 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; }