Re: Change in the way strong file closure works?

Hi Ed,
    This is probably related to some of my recent checkins to the file/group
code.  I'll look into it and get it fixed shortly.

    Quincey

> This morning I did a hdf5 update, and now the following code does not
> work, though it did before.
> 
> The problem seems to be related to closing the file. I call for strong
> file closure, but the close fails anyway. The error output is below.
> 
> What am I missing here?
> 
> Thanks!
> 
> Ed
> 
> int
> main()
> {
>    hid_t fileid, access_plist, spaceid, typeid;
>    hid_t datasetid;
>    hsize_t dims[1];
>    struct s1 {
>        unsigned char c1;
>        double d;
>    } data[DIM1_LEN];
>    int i;
> 
>    for (i=0; i<DIM1_LEN; i++)
>    {
>       data[i].c1 = 126;
>       data[i].d = -9999999;
>    }
> 
>    printf("*** Checking packing of HDF5 compound types...");
>    
>    /* Open file and create group. */
>    if ((access_plist = H5Pcreate(H5P_FILE_ACCESS)) < 0) ERR;
>    if (H5Pset_fclose_degree(access_plist, H5F_CLOSE_STRONG)) ERR;
>    if ((fileid = H5Fcreate(FILE_NAME, H5F_ACC_TRUNC, H5P_DEFAULT, 
>                          access_plist)) < 0) ERR;
> 
>    /* Create a simple compound type. */
>    if ((typeid = H5Tcreate(H5T_COMPOUND, sizeof(struct s1))) < 0) ERR;
>    if (H5Tinsert(typeid, "c1", HOFFSET(struct s1, c1), H5T_NATIVE_UCHAR) < 0) 
> ERR;
>    if (H5Tinsert(typeid, "d", HOFFSET(struct s1, d), H5T_NATIVE_DOUBLE) < 0) 
> ERR;
>    if (H5Tcommit(fileid, COMPOUND_NAME, typeid) < 0) ERR;
> 
>    /* Create a space. */
>    dims[0] = DIM1_LEN;
>    if ((spaceid = H5Screate_simple(1, dims, dims)) < 0) ERR;
> 
>    /* Create a dataset of this compound type. */
>    if ((datasetid = H5Dcreate(fileid, VAR_NAME, typeid, spaceid, 
>                             H5P_DEFAULT)) < 0) ERR;
> 
>    /* Write some data. */
>    if (H5Dwrite(datasetid, typeid, H5S_ALL, H5S_ALL, 
>               H5P_DEFAULT, data) < 0) ERR;
> 
>    /* Release all resources. */
>    if (H5Fclose(fileid) < 0) ERR;
> 
> 
> This code results in the following error:
> 
> HDF5-DIAG: Error detected in HDF5 (1.7.51) thread 0:
>   #000: H5F.c line 2788 in H5Fclose(): decrementing file ID failed
>     major: Object atom
>     minor: Unable to close file
>   #001: H5F.c line 2577 in H5F_close(): can't close file
>     major: File accessability
>     minor: Unable to close file
>   #002: H5F.c line 2686 in H5F_try_close(): can't close object
>     major: Object atom
>     minor: Close failed
>   #003: H5I.c line 1340 in H5I_dec_ref(): can't locate ID
>     major: Object atom
>     minor: Unable to find atom information (already closed?)
>   #004: H5I.c line 1893 in H5I_search(): invalid type
>     major: Object atom
>     minor: Unable to find ID group information
> 
> 
> -- 
> Ed Hartnett  -- ed@xxxxxxxxxxxxxxxx
>