diff options
author | James Laird <jlaird@hdfgroup.org> | 2006-12-14 18:46:51 (GMT) |
---|---|---|
committer | James Laird <jlaird@hdfgroup.org> | 2006-12-14 18:46:51 (GMT) |
commit | 57a786d9c0242b7c94d0b0a1c8519f9b906d194a (patch) | |
tree | 90afd463a6ebde70a585061f80ee8ff30bfd419f /src/H5Dcontig.c | |
parent | 481cfbe0e958ba72623803884f4c69179724582f (diff) | |
download | hdf5-57a786d9c0242b7c94d0b0a1c8519f9b906d194a.zip hdf5-57a786d9c0242b7c94d0b0a1c8519f9b906d194a.tar.gz hdf5-57a786d9c0242b7c94d0b0a1c8519f9b906d194a.tar.bz2 |
[svn-r13063] Cleaned up some memory issues when copying, in preparation for checking in
code to copy shared messages. Should be fewer memory leaks and fewer
"uninitialized memory reads."
Tested on kagiso, smirom, and Windows.
Diffstat (limited to 'src/H5Dcontig.c')
-rw-r--r-- | src/H5Dcontig.c | 14 |
1 files changed, 6 insertions, 8 deletions
diff --git a/src/H5Dcontig.c b/src/H5Dcontig.c index f664715..add8a8b 100644 --- a/src/H5Dcontig.c +++ b/src/H5Dcontig.c @@ -1046,12 +1046,14 @@ H5D_contig_copy(H5F_t *f_src, const H5O_layout_t *layout_src, H5F_t *f_dst, H5_CHECK_OVERFLOW(total_src_nbytes, hsize_t, size_t); buf_size = MIN(H5D_TEMP_BUF_SIZE, (size_t)total_src_nbytes); + /* Create datatype ID for src datatype. We may or may not use this ID, + * but this ensures that the src datatype will be freed. + */ + if((tid_src = H5I_register(H5I_DATATYPE, dt_src)) < 0) + HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register source file datatype") + /* If there's a VLEN source datatype, set up type conversion information */ if(H5T_detect_class(dt_src, H5T_VLEN) > 0) { - /* Create datatype ID for src datatype */ - if((tid_src = H5I_register(H5I_DATATYPE, dt_src)) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register source file datatype") - /* create a memory copy of the variable-length datatype */ if(NULL == (dt_mem = H5T_copy(dt_src, H5T_COPY_TRANSIENT))) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, FAIL, "unable to copy") @@ -1113,10 +1115,6 @@ H5D_contig_copy(H5F_t *f_src, const H5O_layout_t *layout_src, H5F_t *f_dst, else { /* Check for reference datatype */ if(H5T_get_class(dt_src, FALSE) == H5T_REFERENCE) { - /* Create datatype ID for src datatype, so it gets freed */ - if((tid_src = H5I_register(H5I_DATATYPE, dt_src)) < 0) - HGOTO_ERROR(H5E_DATATYPE, H5E_CANTREGISTER, FAIL, "unable to register source file datatype") - /* Need to fix values of references when copying across files */ if(f_src != f_dst) fix_ref = TRUE; |