This implementation has the following issues:
1) pthreads implementation only -- we still need a windows version.
2) must investigate thread cancelation issues
3) Error reporting is very poor. I followed the error reporting on
the existing thread safe code, but this should be re-visited and
improved.
Code is currently setup to use the new recursive R/W lock instead of
the global mutex to control entry to the library in threadsafe builds.
To revert to the global mutex, set H5TS__USE_REC_RW_LOCK_FOR_GLOBAL_MUTEX
in H5TSprivate.h to FALSE.
Added a reasonably robust regression test for the reursive R/W lock
in test/ttsafe_rec_rw_lock.c
Note that the change to hl/src/H5LTanalyse.c is an artifact of clang-format.
Tested serial threadsafe debug and production on jelly, and also regular
serial / debug.
On Windows builds, the new recursive R/W lock should not be built and
we should use the existing global mutex -- however this is not tested
at this time.
56 lines
2.0 KiB
C
56 lines
2.0 KiB
C
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
|
* Copyright by The HDF Group. *
|
|
* Copyright by the Board of Trustees of the University of Illinois. *
|
|
* All rights reserved. *
|
|
* *
|
|
* This file is part of HDF5. The full HDF5 copyright notice, including *
|
|
* terms governing use, modification, and redistribution, is contained in *
|
|
* the COPYING file, which can be found at the root of the source code *
|
|
* distribution tree, or in https://support.hdfgroup.org/ftp/HDF5/releases. *
|
|
* If you do not have access to either file, you may request a copy from *
|
|
* help@hdfgroup.org. *
|
|
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
|
|
|
/*
|
|
* This header file contains information required for testing the HDF5 library.
|
|
*/
|
|
|
|
#ifndef TTSAFE_H
|
|
#define TTSAFE_H
|
|
|
|
/*
|
|
* Include required headers. This file tests internal library functions,
|
|
* so we include the private headers here.
|
|
*/
|
|
#include "testhdf5.h"
|
|
|
|
/* Prototypes for the support routines */
|
|
extern char *gen_name(int);
|
|
|
|
/* Prototypes for the test routines */
|
|
void tts_is_threadsafe(void);
|
|
#ifdef H5_HAVE_THREADSAFE
|
|
void tts_rec_rw_lock_smoke_check_1(void);
|
|
void tts_rec_rw_lock_smoke_check_2(void);
|
|
void tts_rec_rw_lock_smoke_check_3(void);
|
|
void tts_rec_rw_lock_smoke_check_4(void);
|
|
void tts_dcreate(void);
|
|
void tts_error(void);
|
|
void tts_cancel(void);
|
|
void tts_acreate(void);
|
|
void tts_attr_vlen(void);
|
|
|
|
/* Prototypes for the cleanup routines */
|
|
void cleanup_rec_rw_lock_smoke_check_1(void);
|
|
void cleanup_rec_rw_lock_smoke_check_2(void);
|
|
void cleanup_rec_rw_lock_smoke_check_3(void);
|
|
void cleanup_rec_rw_lock_smoke_check_4(void);
|
|
void cleanup_dcreate(void);
|
|
void cleanup_error(void);
|
|
void cleanup_cancel(void);
|
|
void cleanup_acreate(void);
|
|
void cleanup_attr_vlen(void);
|
|
|
|
#endif /* H5_HAVE_THREADSAFE */
|
|
#endif /* TTSAFE_H */
|