diff options
author | Dana Robinson <derobins@hdfgroup.org> | 2020-08-14 19:35:07 (GMT) |
---|---|---|
committer | Dana Robinson <derobins@hdfgroup.org> | 2020-08-14 19:35:07 (GMT) |
commit | 039213d919c0bcb8f01805f34b9ff6889b06158f (patch) | |
tree | b5c2158184ccb0c9556a4d1f89931d210d9576ca /test/h5test.c | |
parent | b8b219d19d158d272cd6b1037bbc8d6e3d64fc73 (diff) | |
download | hdf5-039213d919c0bcb8f01805f34b9ff6889b06158f.zip hdf5-039213d919c0bcb8f01805f34b9ff6889b06158f.tar.gz hdf5-039213d919c0bcb8f01805f34b9ff6889b06158f.tar.bz2 |
Brings file locking changes from develop
Diffstat (limited to 'test/h5test.c')
-rw-r--r-- | test/h5test.c | 58 |
1 files changed, 58 insertions, 0 deletions
diff --git a/test/h5test.c b/test/h5test.c index 2613ce1..5e6f01a 100644 --- a/test/h5test.c +++ b/test/h5test.c @@ -1941,3 +1941,61 @@ const char *H5_get_srcdir(void) return(NULL); } /* end H5_get_srcdir() */ +/*------------------------------------------------------------------------- + * Function: h5_check_if_file_locking_enabled + * + * Purpose: Checks if file locking is enabled on this file system. + * + * Return: SUCCEED/FAIL + * are_enabled will be FALSE if file locking is disabled on + * the file system of if there were errors. + * + *------------------------------------------------------------------------- + */ +herr_t +h5_check_if_file_locking_enabled(hbool_t *is_enabled) +{ + const char *filename = "locking_test_file"; + int pmode = O_RDWR | O_CREAT | O_TRUNC; + int fd = -1; + + *is_enabled = TRUE; + + if((fd = HDopen(filename, pmode, H5_POSIX_CREATE_MODE_RW)) < 0) + goto error; + + /* Test HDflock() to see if it works */ + if(HDflock(fd, LOCK_EX | LOCK_NB) < 0) { + if(ENOSYS == errno) { + /* When errno is set to ENOSYS, the file system does not support + * locking, so ignore it. This is most frequently used on + * Lustre. If we also want to check for disabled NFS locks + * we'll need to check for ENOLCK, too. That isn't done by + * default here since that could also represent an actual + * error condition. + */ + errno = 0; + *is_enabled = FALSE; + } + else + goto error; + } + if(HDflock(fd, LOCK_UN) < 0) + goto error; + + if(HDclose(fd) < 0) + goto error; + if(HDremove(filename) < 0) + goto error; + + return SUCCEED; + +error: + *is_enabled = FALSE; + if (fd > -1) { + HDclose(fd); + HDremove(filename); + } + return FAIL; +} /* end h5_check_if_file_locking_enabled() */ + |