void globus_usage_stats_handle_destroy( globus_usage_stats_handle_t vhandle) { #ifndef TARGET_ARCH_ARM globus_i_usage_stats_handle_t * handle = (globus_i_usage_stats_handle_t *) vhandle; if(handle) { if(handle->targets) { globus_list_destroy_all(handle->targets, globus_libc_free); } if(handle->xio_desc_list) { globus_xio_data_descriptor_t * dd; while (!globus_list_empty (handle->xio_desc_list)) { if((dd = globus_list_remove( &handle->xio_desc_list, handle->xio_desc_list)) != NULL) { globus_xio_data_descriptor_destroy(*dd); globus_free(dd); } } } if(handle->xio_handle) { globus_xio_close(handle->xio_handle, NULL); } globus_mutex_destroy(&handle->mutex); globus_free(handle); } #endif }
globus_result_t globus_xio_data_descriptor_copy( globus_xio_data_descriptor_t * dst, globus_xio_data_descriptor_t src) { globus_i_xio_op_t * op_src; globus_i_xio_op_t * op_dst; globus_result_t res; int ctr; int ctr2; GlobusXIOName(globus_xio_data_descriptor_copy); GlobusXIODebugEnter(); if(dst == NULL) { res = GlobusXIOErrorParameter("dst"); goto err; } if(src == NULL) { res = GlobusXIOErrorParameter("src"); goto err; } op_src = src; res = globus_xio_data_descriptor_init(&op_dst, op_src->_op_handle); if(res != GLOBUS_SUCCESS) { goto err; } for(ctr = 0; ctr < op_src->stack_size; ctr++) { res = op_dst->_op_context->entry[ctr].driver->attr_copy_func( &op_dst->entry[ctr].dd, op_src->entry[ctr].dd); if(res != GLOBUS_SUCCESS) { for(ctr2 = 0; ctr2 < ctr; ctr2++) { /* ignore result here */ op_dst->_op_context->entry[ctr].driver->attr_destroy_func( op_dst->entry[ctr].dd); } globus_memory_push_node(&op_dst->_op_context->op_memory, op_dst); goto err_destroy_op; } } *dst = op_dst; GlobusXIODebugExit(); return GLOBUS_SUCCESS; err_destroy_op: globus_xio_data_descriptor_destroy(op_dst); err: GlobusXIODebugExitWithError(); return res; }