The assertion occurs when using the HDF5 v1.8.16 Thread Safe with Zlib and
the H5_term_library() function is called after having closed a file which
contains a chunked, *non-compressed* Armadillo Matrix of doubles (i.e.,
arma::mat).



The assertion *does not occur* when using the HDF5 v1.8.16 Thread Safe *without
Zlib* and the H5_term_library() function is called after having closed a
file which contains a chunked, *non-compressed* Armadillo Matrix of doubles
(i.e., arma::mat).



The H5 file is created with the ‘H5F_CLOSE_STRONG’ property





GDB dump:



Program received signal SIGABRT, Aborted.

0x0000003ca7032625 in raise () from /lib64/libc.so.6

(gdb) up

#1  0x0000003ca7033e05 in abort () from /lib64/libc.so.6

(gdb)

#2  0x0000003ca702b74e in __assert_fail_base () from /lib64/libc.so.6

(gdb)

#3  0x0000003ca702b810 in __assert_fail () from /lib64/libc.so.6

(gdb)

#4  0x00007ffff7584e1c in H5T_conv_struct_free (priv=0xab6e30) at
H5Tconv.c:1845

1845                HDassert(status >= 0);

(gdb)

#5  0x00007ffff7587180 in H5T__conv_struct_opt (src_id=-1, dst_id=-1,
cdata=0xab2410, nelmts=0, buf_stride=0, bkg_stride=0,

    _buf=0x0, _bkg=0x0, dxpl_id=167772168) at H5Tconv.c:2458

2458                cdata->priv = H5T_conv_struct_free((H5T_conv_struct_t
*)(cdata->priv));

(gdb)

#6  0x00007ffff7564c0f in H5T_term_interface () at H5T.c:1410

1410                    if((path->func)((hid_t)FAIL, (hid_t)FAIL,
&(path->cdata), (size_t)0,

(gdb)

#7  0x00007ffff7279134 in H5_term_library () at H5.c:289

289             pending += DOWN(T);

(gdb)

#8  0x00007ffff727b082 in H5close () at H5.c:859

859         H5_term_library();

(gdb)

#9  0x00007ffff6fffa5f in H5::H5Library::termH5cpp() ()

   from
/local/mnt/workspace/pcereck/ra_comp/pensim/ThirdParty/hdf5/hdf5-1.8.16/thread.safe.with.zlib/lib/libhdf5_cpp.so.11

(gdb) up

#10 0x0000003ca7035ebd in __cxa_finalize () from /lib64/libc.so.6

(gdb)

#11 0x00007ffff6ffc1e6 in __do_global_dtors_aux ()

   from
/local/mnt/workspace/pcereck/ra_comp/pensim/ThirdParty/hdf5/hdf5-1.8.16/thread.safe.with.zlib/lib/libhdf5_cpp.so.11

(gdb)





Here is the *H5T_conv_struct_free*() function (the assert on line 1845 is
highlighted):



static H5T_conv_struct_t *

*H5T_conv_struct_free*(H5T_conv_struct_t *priv)

{

    int         *src2dst = priv->src2dst;

    hid_t       *src_memb_id = priv->src_memb_id,

                *dst_memb_id = priv->dst_memb_id;

    unsigned    i;



    FUNC_ENTER_NOAPI_NOINIT_NOERR



    for(i = 0; i < priv->src_nmembs; i++)

        if(src2dst[i] >= 0) {

            int status;



            status = *H5I_dec_ref*(src_memb_id[i]);

            *HDassert*(status >= 0);

            status = *H5I_dec_ref*(dst_memb_id[src2dst[i]]);

            *HDassert*(status >= 0);

        } */* end if */*



    *H5MM_xfree*(src2dst);

    *H5MM_xfree*(src_memb_id);

    *H5MM_xfree*(dst_memb_id);

    *H5MM_xfree*(priv->memb_path);



    *FUNC_LEAVE_NOAPI*((H5T_conv_struct_t *)*H5MM_xfree*(priv))

} */* end H5T_conv_struct_free() */*
_______________________________________________
Hdf-forum is for HDF software users discussion.
[email protected]
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5

Reply via email to