diff options
author | Raymond Lu <songyulu@hdfgroup.org> | 2010-09-08 17:12:18 (GMT) |
---|---|---|
committer | Raymond Lu <songyulu@hdfgroup.org> | 2010-09-08 17:12:18 (GMT) |
commit | ec5f5c868fb4dad3452db045c627fe258b152cd2 (patch) | |
tree | 2d70e1cceb03c1d708eee738000681d7391cc8ae /src/H5Ofill.c | |
parent | 4d88ec662b733cb6ec119e126dc96aa74ba4632b (diff) | |
download | hdf5-ec5f5c868fb4dad3452db045c627fe258b152cd2.zip hdf5-ec5f5c868fb4dad3452db045c627fe258b152cd2.tar.gz hdf5-ec5f5c868fb4dad3452db045c627fe258b152cd2.tar.bz2 |
[svn-r19359] When mandatory filter failed to write data chunks, the dataset
couldn't close (bug 1260). The fix releases all resources and closes
the dataset but returns a failure.
Tested with h5committest - jam, heiwa, amani.
Diffstat (limited to 'src/H5Ofill.c')
-rw-r--r-- | src/H5Ofill.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/src/H5Ofill.c b/src/H5Ofill.c index ebe1eb5..8bde5ae 100644 --- a/src/H5Ofill.c +++ b/src/H5Ofill.c @@ -539,30 +539,30 @@ H5O_fill_copy(const void *_src, void *_dst) HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy/register datatype") src_id = H5I_register(H5I_DATATYPE, H5T_copy(src->type, H5T_COPY_ALL), FALSE); if(src_id < 0) { - H5I_dec_ref(dst_id, FALSE); + H5I_dec_ref(dst_id, FALSE, FALSE); HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to copy/register datatype") } /* end if */ /* Allocate a background buffer */ bkg_size = MAX(H5T_get_size(dst->type), H5T_get_size(src->type)); if(H5T_path_bkg(tpath) && NULL == (bkg_buf = H5FL_BLK_CALLOC(type_conv, bkg_size))) { - H5I_dec_ref(src_id, FALSE); - H5I_dec_ref(dst_id, FALSE); + H5I_dec_ref(src_id, FALSE, FALSE); + H5I_dec_ref(dst_id, FALSE, FALSE); HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, NULL, "memory allocation failed") } /* end if */ /* Convert fill value */ if(H5T_convert(tpath, src_id, dst_id, (size_t)1, (size_t)0, (size_t)0, dst->buf, bkg_buf, H5AC_ind_dxpl_id) < 0) { - H5I_dec_ref(src_id, FALSE); - H5I_dec_ref(dst_id, FALSE); + H5I_dec_ref(src_id, FALSE, FALSE); + H5I_dec_ref(dst_id, FALSE, FALSE); if(bkg_buf) bkg_buf = H5FL_BLK_FREE(type_conv, bkg_buf); HGOTO_ERROR(H5E_DATASET, H5E_CANTCONVERT, NULL, "datatype conversion failed") } /* end if */ /* Release the background buffer */ - H5I_dec_ref(src_id, FALSE); - H5I_dec_ref(dst_id, FALSE); + H5I_dec_ref(src_id, FALSE, FALSE); + H5I_dec_ref(dst_id, FALSE, FALSE); if(bkg_buf) bkg_buf = H5FL_BLK_FREE(type_conv, bkg_buf); } /* end if */ @@ -726,7 +726,7 @@ H5O_fill_reset_dyn(H5O_fill_t *fill) done: if(fill_type_id > 0) - H5I_dec_ref(fill_type_id, FALSE); + H5I_dec_ref(fill_type_id, FALSE, FALSE); FUNC_LEAVE_NOAPI(ret_value) } /* end H5O_fill_reset_dyn() */ @@ -979,9 +979,9 @@ H5O_fill_convert(H5O_fill_t *fill, H5T_t *dset_type, hbool_t *fill_changed, hid_ done: if(src_id >= 0) - H5I_dec_ref(src_id, FALSE); + H5I_dec_ref(src_id, FALSE, FALSE); if(dst_id >= 0) - H5I_dec_ref(dst_id, FALSE); + H5I_dec_ref(dst_id, FALSE, FALSE); if(buf != fill->buf) H5MM_xfree(buf); if(bkg) |