Hi,

I am using HDF5 storage in SWMR mode. I am open files with huge number of 
datasets and then I close it but after H5Fclose the amount of memory reserved 
by the process is the same. 

The same effect happens when data is written to a data set. All memory reserved 
by the process (for chunks, caches, etc) is not freed after file is closed 
(H5Fclose). 

I have checked with valgrind but no memory leak is detected. It seams there is 
a free of memory before the process finishes but I need this free when file is 
closed. 

Is possible to have memory free after H5Fclose without finishing the process?
 

A simplified example of my code follows the typical sequence:

———————————————————————————————
#include "hdf5.h"
#include "hdf5_hl.h"
#include <stdlib.h>

// Number of tables to create
#define NUM_DATASETS    10000
#define CHUNK_SIZE 100

typedef struct
{
        double data;
        long long timestamp;
} data_t;

int main(void)
{
        hid_t fid;
        hid_t sid;
        hid_t dcpl;
        hid_t pdsets[NUM_DATASETS];
        char dname[300];
        hsize_t dims[2] = {1, 0}; /* Dataset starting dimensions */
        hsize_t max_dims[2] = {1, H5S_UNLIMITED}; /* Dataset maximum dimensions 
*/
        hsize_t chunk_dims[2] = {1, CHUNK_SIZE}; /* Chunk dimensions */
        int i;

        printf("Creating file\n");

        // Open file
        fid = H5Fcreate("packet.h5", H5F_ACC_TRUNC | H5F_ACC_SWMR_WRITE, 
H5P_DEFAULT, H5P_DEFAULT);
        
        // Create compound data type
        hid_t datatype = H5Tcreate(H5T_COMPOUND, sizeof(data_t));
        H5Tinsert(datatype, "Data", HOFFSET(data_t, data), H5T_NATIVE_DOUBLE);
        H5Tinsert(datatype, "Timestamp", HOFFSET(data_t, timestamp), 
H5T_NATIVE_LLONG);

        /* Create dataspace for creating datasets */
        if((sid = H5Screate_simple(2, dims, max_dims)) < 0)
                return 1;

         /* Create dataset creation property list */
        if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0)
                return -1;
        if(H5Pset_chunk(dcpl, 2, chunk_dims) < 0)
                return -1;

        printf("Creating %d datasets\n", NUM_DATASETS);
        // Create datasets
        for (i = 0; i < NUM_DATASETS; i++) {
                sprintf(dname,"dset_%d",i);
                if((pdsets[i] = H5Dcreate2(fid, dname, datatype, sid, 
H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
             return 1;
                if(H5Dclose(pdsets[i]) < 0)
             return -1;
        }

        printf("Closing everything\n");

        if(H5Pclose(dcpl) < 0)
        return -1;
        if(H5Sclose(sid) < 0)
        return -1;
    if(H5Tclose(datatype) < 0)
        return -1;
    if(H5Fclose(fid) < 0)
        return -1;

        printf("After closing...\n");

        return 0;
}
---------------------------------------------------

 
Thank you.

Rodrigo
----------------------------
Confidencialidad: 
Este mensaje y sus ficheros adjuntos se dirige exclusivamente a su destinatario 
y puede contener informaci�n privilegiada o confidencial. Si no es vd. el 
destinatario indicado, queda notificado de que la utilizaci�n, divulgaci�n y/o 
copia sin autorizaci�n est� prohibida en virtud de la legislaci�n vigente. Si 
ha recibido este mensaje por error, le rogamos que nos lo comunique 
inmediatamente respondiendo al mensaje y proceda a su destrucci�n.

Disclaimer: 
This message and its attached files is intended exclusively for its recipients 
and may contain confidential information. If you received this e-mail in error 
you are hereby notified that any dissemination, copy or disclosure of this 
communication is strictly prohibited and may be unlawful. In this case, please 
notify us by a reply and delete this email and its contents immediately. 
----------------------------


_______________________________________________
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