NOTICE: This version of the NSF Unidata web site (archive.unidata.ucar.edu) is no longer being updated.
Current content can be found at unidata.ucar.edu.
To learn about what's going on, see About the Archive Site.
NOTE: The netcdf-hdf
mailing list is no longer active. The list archives are made available for historical reasons.
Hi Rob, On Sep 14, 2007, at 11:22 AM, Robert Latham wrote:
On Thu, Sep 13, 2007 at 02:05:07PM -0500, Quincey Koziol wrote:On Sep 13, 2007, at 2:00 PM, Robert Latham wrote:Really? Call H5Close inside a netcdf4 code? Well, I can do that, sure. That seems to lack a certain symmetry, no?I agree with you, but I don't think there's a corresponding "shut the netCDF-4 library down" API routine. :-)Here's a trick that we do in ROMIO: we attach an attribute to the communicator. This attribute has a hook for a function to run when it's deleted. We hook in a ROMIO cleanup routine there. Then when MPI_Finalize runs, the MPI implementation deletes attributes on all communicators before freeing them, and ROMIO's cleanup routine fires off. The code sort of looks like this: /* ADIO_Init_keyval: a global variable */ if (ADIO_Init_keyval == MPI_KEYVAL_INVALID) { MPI_Keyval_create(MPI_NULL_COPY_FN, ADIOI_End_call, &ADIO_Init_keyval, (void *)0); MPI_Attr_put(MPI_COMM_WORLD, ADIO_Initkeyval, (void *)0); ADIO_Init(&status); } ADIOI_End_call just wraps around ADIO_End, and ADIO_End deallocates memory, cleans up data structures, and shuts down any other interfaces ROMIO fired up. Note that we put the attribute on COMM_WORLD: we don't care what communicator the end-user fed ROMIO; we just want a cleanup routine to fire when MPI_Finalize is invoked. ROMIO puts this in the open and delete paths. For NetCDF, you could put this in nc_open_par and nc_create_par I don't know if this is a perfect fit for NetCDF-4, but at least it's one way to hide the H5Close call from NetCDF-4 end-users.
That's a clever way to help the problem. It's a bit "weird" in the sense that nc_open_par/nc_create_par are per-file and the H5close is per-library/per-application (more like MPI_Init/MPI_Finalize). It should work fine if the library is opened and closed repeatedly, but it's not something we stress a lot in our tests.
Quincey
Attachment:
smime.p7s
Description: S/MIME cryptographic signature
netcdf-hdf
archives: