int ompio_io_ompio_file_close (mca_io_ompio_file_t *ompio_fh) { int ret = OMPI_SUCCESS; int delete_flag = 0; char name[256]; if(mca_io_ompio_coll_timing_info){ strcpy (name, "WRITE"); if (!ompi_io_ompio_empty_print_queue(WRITE_PRINT_QUEUE)){ ret = ompi_io_ompio_print_time_info(WRITE_PRINT_QUEUE, name, ompio_fh); if (OMPI_SUCCESS != ret){ printf("Error in print_time_info "); } } strcpy (name, "READ"); if (!ompi_io_ompio_empty_print_queue(READ_PRINT_QUEUE)){ ret = ompi_io_ompio_print_time_info(READ_PRINT_QUEUE, name, ompio_fh); if (OMPI_SUCCESS != ret){ printf("Error in print_time_info "); } } } if ( ompio_fh->f_amode & MPI_MODE_DELETE_ON_CLOSE ) { delete_flag = 1; } /*close the sharedfp file*/ if( NULL != ompio_fh->f_sharedfp ){ ret = ompio_fh->f_sharedfp->sharedfp_file_close(ompio_fh); } if ( NULL != ompio_fh->f_fs ) { /* The pointer might not be set if file_close() is ** called from the file destructor in case of an error ** during file_open() */ ret = ompio_fh->f_fs->fs_file_close (ompio_fh); } if ( delete_flag && 0 == ompio_fh->f_rank ) { mca_io_ompio_file_delete ( ompio_fh->f_filename, MPI_INFO_NULL ); } if ( NULL != ompio_fh->f_fs ) { mca_fs_base_file_unselect (ompio_fh); } if ( NULL != ompio_fh->f_fbtl ) { mca_fbtl_base_file_unselect (ompio_fh); } if ( NULL != ompio_fh->f_fcoll ) { mca_fcoll_base_file_unselect (ompio_fh); } if ( NULL != ompio_fh->f_sharedfp) { mca_sharedfp_base_file_unselect (ompio_fh); } if (NULL != ompio_fh->f_io_array) { free (ompio_fh->f_io_array); ompio_fh->f_io_array = NULL; } if (NULL != ompio_fh->f_init_procs_in_group) { free (ompio_fh->f_init_procs_in_group); ompio_fh->f_init_procs_in_group = NULL; } if (NULL != ompio_fh->f_procs_in_group) { free (ompio_fh->f_procs_in_group); ompio_fh->f_procs_in_group = NULL; } if (NULL != ompio_fh->f_decoded_iov) { free (ompio_fh->f_decoded_iov); ompio_fh->f_decoded_iov = NULL; } if (NULL != ompio_fh->f_convertor) { free (ompio_fh->f_convertor); ompio_fh->f_convertor = NULL; } if (NULL != ompio_fh->f_datarep) { free (ompio_fh->f_datarep); ompio_fh->f_datarep = NULL; } if (MPI_DATATYPE_NULL != ompio_fh->f_iov_type) { ompi_datatype_destroy (&ompio_fh->f_iov_type); } if ( MPI_DATATYPE_NULL != ompio_fh->f_etype ) { ompi_datatype_destroy (&ompio_fh->f_etype); } if ( MPI_DATATYPE_NULL != ompio_fh->f_filetype ){ ompi_datatype_destroy (&ompio_fh->f_filetype); } if ( MPI_DATATYPE_NULL != ompio_fh->f_orig_filetype ){ ompi_datatype_destroy (&ompio_fh->f_orig_filetype); } if (MPI_COMM_NULL != ompio_fh->f_comm && (ompio_fh->f_flags & OMPIO_SHAREDFP_IS_SET) ) { ompi_comm_free (&ompio_fh->f_comm); } return ret; }
int ompio_io_ompio_file_close (mca_io_ompio_file_t *ompio_fh) { int ret = OMPI_SUCCESS; int delete_flag = 0; char name[256]; if(mca_io_ompio_coll_timing_info) { strcpy (name, "WRITE"); if (!ompi_io_ompio_empty_print_queue(WRITE_PRINT_QUEUE)) { ret = ompi_io_ompio_print_time_info(WRITE_PRINT_QUEUE, name, ompio_fh); if (OMPI_SUCCESS != ret) { printf("Error in print_time_info "); } } strcpy (name, "READ"); if (!ompi_io_ompio_empty_print_queue(READ_PRINT_QUEUE)) { ret = ompi_io_ompio_print_time_info(READ_PRINT_QUEUE, name, ompio_fh); if (OMPI_SUCCESS != ret) { printf("Error in print_time_info "); } } } if ( ompio_fh->f_amode & MPI_MODE_DELETE_ON_CLOSE ) { delete_flag = 1; } /*close the sharedfp file*/ if(ompio_fh->f_sharedfp != NULL) { ret = ompio_fh->f_sharedfp->sharedfp_file_close(ompio_fh); } ret = ompio_fh->f_fs->fs_file_close (ompio_fh); if ( delete_flag && 0 == ompio_fh->f_rank ) { mca_io_ompio_file_delete ( ompio_fh->f_filename, MPI_INFO_NULL ); } mca_fs_base_file_unselect (ompio_fh); mca_fbtl_base_file_unselect (ompio_fh); mca_fcoll_base_file_unselect (ompio_fh); /* mca_sharedfp_base_file_unselect (ompio_fh) ; EG?*/ if (NULL != ompio_fh->f_io_array) { free (ompio_fh->f_io_array); ompio_fh->f_io_array = NULL; } if (NULL != ompio_fh->f_init_procs_in_group) { free (ompio_fh->f_init_procs_in_group); ompio_fh->f_init_procs_in_group = NULL; } if (NULL != ompio_fh->f_procs_in_group) { free (ompio_fh->f_procs_in_group); ompio_fh->f_procs_in_group = NULL; } if (NULL != ompio_fh->f_decoded_iov) { free (ompio_fh->f_decoded_iov); ompio_fh->f_decoded_iov = NULL; } if (NULL != ompio_fh->f_convertor) { free (ompio_fh->f_convertor); ompio_fh->f_convertor = NULL; } if (NULL != ompio_fh->f_datarep) { free (ompio_fh->f_datarep); ompio_fh->f_datarep = NULL; } if (MPI_DATATYPE_NULL != ompio_fh->f_iov_type) { ompi_datatype_destroy (&ompio_fh->f_iov_type); } if (MPI_COMM_NULL != ompio_fh->f_comm) { ompi_comm_free (&ompio_fh->f_comm); } /* if (MPI_INFO_NULL != ompio_fh->f_info) { ompi_info_free (&ompio_fh->f_info); } */ return ret; }