summaryrefslogtreecommitdiffstats
path: root/src/H5F.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/H5F.c')
-rw-r--r--src/H5F.c38
1 files changed, 37 insertions, 1 deletions
diff --git a/src/H5F.c b/src/H5F.c
index df58a5e..60956c7 100644
--- a/src/H5F.c
+++ b/src/H5F.c
@@ -915,7 +915,7 @@ H5F_new(H5F_file_t *shared, hid_t fcpl_id, hid_t fapl_id, H5FD_t *lf)
HGOTO_ERROR(H5E_FILE, H5E_NOSPACE, NULL, "can't allocate shared file structure")
f->shared->super_addr = HADDR_UNDEF;
f->shared->base_addr = HADDR_UNDEF;
- f->shared->freespace_addr = HADDR_UNDEF;
+ f->shared->extension_addr = HADDR_UNDEF;
f->shared->sohm_addr = HADDR_UNDEF;
f->shared->sohm_vers = HDF5_SHAREDHEADER_VERSION;
f->shared->sohm_nindexes = 0;
@@ -1064,6 +1064,9 @@ done:
* Pedro Vicente, <pvn@ncsa.uiuc.edu> 18 Sep 2002
* Added `id to name' support.
*
+ * James Laird, 2007-1-29
+ * H5F_dest now frees superblock extension oloc.
+ *
*-------------------------------------------------------------------------
*/
static herr_t
@@ -1399,6 +1402,39 @@ H5F_open(const char *name, unsigned flags, hid_t fcpl_id, hid_t fapl_id, hid_t d
if(H5G_mkroot(file, dxpl_id, NULL) < 0)
HGOTO_ERROR(H5E_FILE, H5E_CANTINIT, NULL, "unable to create/open root group")
+ /* JAMES: probably out of order or something. Also not the right test. */
+ /* Create the superblock extension OH */
+ if(file->shared->sohm_nindexes > 0) {
+ H5O_loc_t ext_loc; /* Superblock extension location */
+ H5O_shmesg_table_t sohm_table;
+
+ /* JAMES: should this go here, or in SMinit? Or in init_superblock? */
+ /* This isn't actually a group, but the default group creation
+ * list should work fine.
+ */
+ H5O_loc_reset(&ext_loc);
+ /* JAMES: bump the number of open objects to avoid closing the file here */
+ file->nopen_objs++;
+ if(H5O_create(file, dxpl_id, 0 /* JAMES */, H5P_GROUP_CREATE_DEFAULT, &ext_loc) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTCREATE, NULL, "unable to create superblock extension")
+
+ /* Record this address */
+ file->shared->extension_addr = ext_loc.addr;
+
+ /* Write shared message information to the extension */
+ sohm_table.addr = file->shared->sohm_addr;
+ sohm_table.version = file->shared->sohm_vers;
+ sohm_table.nindexes = file->shared->sohm_nindexes;
+
+ if(H5O_msg_create(&ext_loc, H5O_SHMESG_ID, H5O_MSG_FLAG_CONSTANT | H5O_MSG_FLAG_DONTSHARE, H5O_UPDATE_TIME, &sohm_table, dxpl_id) < 0)
+ HGOTO_ERROR(H5E_DATATYPE, H5E_CANTINIT, NULL, "unable to update type header message")
+
+ if(H5O_close(&ext_loc) < 0)
+ HGOTO_ERROR(H5E_OHDR, H5E_CANTRELEASE, NULL, "unable to close superblock extension")
+ file->nopen_objs--;
+ }
+
+
/* Write the superblock to the file */
/* (This must be after the root group is created, since the root
* group's symbol table entry is part of the superblock)