Cherry pick of Windows thread-safety fixes from develop

This commit is contained in:
Dana Robinson
2020-08-14 07:39:00 -07:00
parent 99875ecff4
commit b8b219d19d
2 changed files with 16 additions and 15 deletions

View File

@@ -25,6 +25,8 @@
*/
#include "testhdf5.h"
#if defined(H5_HAVE_THREADSAFE) && !defined(H5_HAVE_WIN_THREADS)
static void my_errx(int, const char *, ...) H5_ATTR_FORMAT(printf, 2, 3);
static void
@@ -40,8 +42,6 @@ my_errx(int code, const char *fmt, ...)
HDexit(code);
}
#if defined(H5_HAVE_THREADSAFE) && !defined(H5_HAVE_WIN_THREADS)
#if defined(H5_HAVE_DARWIN)
typedef struct _pthread_barrierattr {

View File

@@ -54,13 +54,13 @@ void *tts_attr_vlen_thread(void *);
void
tts_attr_vlen(void)
{
pthread_t threads[NUM_THREADS] = {0}; /* Thread declaration */
H5TS_thread_t threads[NUM_THREADS] = {0}; /* Thread declaration */
hid_t fid = H5I_INVALID_HID; /* File ID */
hid_t gid = H5I_INVALID_HID; /* Group ID */
hid_t atid = H5I_INVALID_HID; /* Datatype ID for attribute */
hid_t asid = H5I_INVALID_HID; /* Dataspace ID for attribute */
hid_t aid = H5I_INVALID_HID; /* The attribute ID */
char *string_attr = "2.0"; /* The attribute data */
const char *string_attr = "2.0"; /* The attribute data */
int ret; /* Return value */
int i; /* Local index variable */
@@ -106,26 +106,27 @@ tts_attr_vlen(void)
CHECK(ret, H5I_INVALID_HID, "H5Tclose");
/* Start multiple threads and execute tts_attr_vlen_thread() for each thread */
for(i = 0; i < NUM_THREADS; i++)
pthread_create(&threads[i], NULL, tts_attr_vlen_thread, NULL);
for(i = 0; i < NUM_THREADS; i++) {
threads[i] = H5TS_create_thread(tts_attr_vlen_thread, NULL, NULL);
}
/* Wait for the threads to end */
for(i = 0; i < NUM_THREADS; i++)
pthread_join(threads[i], NULL);
H5TS_wait_for_thread(threads[i]);
} /* end tts_attr_vlen() */
/* Start execution for each thread */
void *
tts_attr_vlen_thread(void *client_data)
tts_attr_vlen_thread(void H5_ATTR_UNUSED *client_data)
{
hid_t fid = H5I_INVALID_HID; /* File ID */
hid_t gid = H5I_INVALID_HID; /* Group ID */
hid_t aid = H5I_INVALID_HID; /* Attribute ID */
hid_t atid = H5I_INVALID_HID; /* Datatype ID for the attribute */
char *string_attr_check; /* The attribute data being read */
char *string_attr = "2.0"; /* The expected attribute data */
herr_t ret; /* Return value */
hid_t fid = H5I_INVALID_HID; /* File ID */
hid_t gid = H5I_INVALID_HID; /* Group ID */
hid_t aid = H5I_INVALID_HID; /* Attribute ID */
hid_t atid = H5I_INVALID_HID; /* Datatype ID for the attribute */
char *string_attr_check; /* The attribute data being read */
const char *string_attr = "2.0"; /* The expected attribute data */
herr_t ret; /* Return value */
/* Open the test file */
fid = H5Fopen(FILENAME, H5F_ACC_RDONLY, H5P_DEFAULT);