Loading [MathJax]/extensions/TeX/AMSsymbols.js
LAL 7.7.0.1-3a66518
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
H5ThreadSafe.c
Go to the documentation of this file.
1#ifdef HAVE_HDF5
2
3#if defined LAL_PTHREAD_LOCK && ! defined H5_HAVE_THREADSAFE
4
5/* LAL is threadsafe but the HDF5 library is not, so make it threadsafe */
6
7#include <pthread.h>
8static pthread_mutex_t lalHDF5Mutex = PTHREAD_MUTEX_INITIALIZER;
9#define LAL_HDF5_MUTEX_LOCK pthread_mutex_lock(&lalHDF5Mutex);
10#define LAL_HDF5_MUTEX_UNLOCK pthread_mutex_unlock(&lalHDF5Mutex);
11
12/* wrap HDF5 library routines with the mutex */
13
14static inline herr_t threadsafe_H5Aclose(hid_t attr_id)
15{
16 LAL_HDF5_MUTEX_LOCK
17 herr_t retval = H5Aclose(attr_id);
18 LAL_HDF5_MUTEX_UNLOCK
19 return retval;
20}
21
22static inline hid_t threadsafe_H5Acreate2(hid_t loc_id, const char *attr_name, hid_t type_id, hid_t space_id, hid_t acpl_id, hid_t aapl_id)
23{
24 LAL_HDF5_MUTEX_LOCK
25 hid_t retval = H5Acreate2(loc_id, attr_name, type_id, space_id, acpl_id, aapl_id);
26 LAL_HDF5_MUTEX_UNLOCK
27 return retval;
28}
29
30static inline ssize_t threadsafe_H5Aget_name(hid_t attr_id, size_t buf_size, char *buf)
31{
32 LAL_HDF5_MUTEX_LOCK
33 ssize_t retval = H5Aget_name(attr_id, buf_size, buf);
34 LAL_HDF5_MUTEX_UNLOCK
35 return retval;
36}
37
38static inline int threadsafe_H5Aget_num_attrs(hid_t loc_id)
39{
40 LAL_HDF5_MUTEX_LOCK
41 int retval = H5Aget_num_attrs(loc_id);
42 LAL_HDF5_MUTEX_UNLOCK
43 return retval;
44}
45
46static inline hid_t threadsafe_H5Aget_space(hid_t attr_id)
47{
48 LAL_HDF5_MUTEX_LOCK
49 hid_t retval = H5Aget_space(attr_id);
50 LAL_HDF5_MUTEX_UNLOCK
51 return retval;
52}
53
54static inline hid_t threadsafe_H5Aget_type(hid_t attr_id)
55{
56 LAL_HDF5_MUTEX_LOCK
57 hid_t retval = H5Aget_type(attr_id);
58 LAL_HDF5_MUTEX_UNLOCK
59 return retval;
60}
61
62static inline hid_t threadsafe_H5Aopen(hid_t obj_id, const char *attr_name, hid_t aapl_id)
63{
64 LAL_HDF5_MUTEX_LOCK
65 hid_t retval = H5Aopen(obj_id, attr_name, aapl_id);
66 LAL_HDF5_MUTEX_UNLOCK
67 return retval;
68}
69
70static inline hid_t threadsafe_H5Aopen_idx(hid_t loc_id, unsigned idx)
71{
72 LAL_HDF5_MUTEX_LOCK
73 hid_t retval = H5Aopen_idx(loc_id, idx);
74 LAL_HDF5_MUTEX_UNLOCK
75 return retval;
76}
77
78static inline herr_t threadsafe_H5Aread(hid_t attr_id, hid_t type_id, void *buf)
79{
80 LAL_HDF5_MUTEX_LOCK
81 herr_t retval = H5Aread(attr_id, type_id, buf);
82 LAL_HDF5_MUTEX_UNLOCK
83 return retval;
84}
85
86static inline herr_t threadsafe_H5Awrite(hid_t attr_id, hid_t type_id, const void *buf)
87{
88 LAL_HDF5_MUTEX_LOCK
89 herr_t retval = H5Awrite(attr_id, type_id, buf);
90 LAL_HDF5_MUTEX_UNLOCK
91 return retval;
92}
93
94static inline herr_t threadsafe_H5Dclose(hid_t dset_id)
95{
96 LAL_HDF5_MUTEX_LOCK
97 herr_t retval = H5Dclose(dset_id);
98 LAL_HDF5_MUTEX_UNLOCK
99 return retval;
100}
101
102static inline hid_t threadsafe_H5Dcreate2(hid_t loc_id, const char *name, hid_t type_id, hid_t space_id, hid_t lcpl_id, hid_t dcpl_id, hid_t dapl_id)
103{
104 LAL_HDF5_MUTEX_LOCK
105 hid_t retval = H5Dcreate2(loc_id, name, type_id, space_id, lcpl_id, dcpl_id, dapl_id);
106 LAL_HDF5_MUTEX_UNLOCK
107 return retval;
108}
109
110static inline hid_t threadsafe_H5Dget_space(hid_t dset_id)
111{
112 LAL_HDF5_MUTEX_LOCK
113 hid_t retval = H5Dget_space(dset_id);
114 LAL_HDF5_MUTEX_UNLOCK
115 return retval;
116}
117
118static inline hid_t threadsafe_H5Dget_type(hid_t dset_id)
119{
120 LAL_HDF5_MUTEX_LOCK
121 hid_t retval = H5Dget_type(dset_id);
122 LAL_HDF5_MUTEX_UNLOCK
123 return retval;
124}
125
126static inline hid_t threadsafe_H5Dopen2(hid_t file_id, const char *name, hid_t dapl_id)
127{
128 LAL_HDF5_MUTEX_LOCK
129 hid_t retval = H5Dopen2(file_id, name, dapl_id);
130 LAL_HDF5_MUTEX_UNLOCK
131 return retval;
132}
133
134static inline herr_t threadsafe_H5Dread(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id, hid_t plist_id, void *buf)
135{
136 LAL_HDF5_MUTEX_LOCK
137 herr_t retval = H5Dread(dset_id, mem_type_id, mem_space_id, file_space_id, plist_id, buf);
138 LAL_HDF5_MUTEX_UNLOCK
139 return retval;
140}
141
142static inline herr_t threadsafe_H5Dvlen_reclaim(hid_t type_id, hid_t space_id, hid_t plist_id, void *buf)
143{
144 LAL_HDF5_MUTEX_LOCK
145 herr_t retval = H5Dvlen_reclaim(type_id, space_id, plist_id, buf);
146 LAL_HDF5_MUTEX_UNLOCK
147 return retval;
148}
149
150static inline herr_t threadsafe_H5Dwrite(hid_t dset_id, hid_t mem_type_id, hid_t mem_space_id, hid_t file_space_id, hid_t plist_id, const void *buf)
151{
152 LAL_HDF5_MUTEX_LOCK
153 herr_t retval = H5Dwrite(dset_id, mem_type_id, mem_space_id, file_space_id, plist_id, buf);
154 LAL_HDF5_MUTEX_UNLOCK
155 return retval;
156}
157
158static inline herr_t threadsafe_H5Fclose(hid_t file_id)
159{
160 LAL_HDF5_MUTEX_LOCK
161 herr_t retval = H5Fclose(file_id);
162 LAL_HDF5_MUTEX_UNLOCK
163 return retval;
164}
165
166static inline hid_t threadsafe_H5Fcreate(const char *filename, unsigned flags, hid_t create_plist, hid_t access_plist)
167{
168 LAL_HDF5_MUTEX_LOCK
169 hid_t retval = H5Fcreate(filename, flags, create_plist, access_plist);
170 LAL_HDF5_MUTEX_UNLOCK
171 return retval;
172}
173
174static inline herr_t threadsafe_H5Fflush(hid_t object_id, H5F_scope_t scope)
175{
176 LAL_HDF5_MUTEX_LOCK
177 herr_t retval = H5Fflush(object_id, scope);
178 LAL_HDF5_MUTEX_UNLOCK
179 return retval;
180}
181
182static inline ssize_t threadsafe_H5Fget_name(hid_t obj_id, char *name, size_t size)
183{
184 LAL_HDF5_MUTEX_LOCK
185 ssize_t retval = H5Fget_name(obj_id, name, size);
186 LAL_HDF5_MUTEX_UNLOCK
187 return retval;
188}
189
190static inline hid_t threadsafe_H5Fopen(const char *filename, unsigned flags, hid_t access_plist)
191{
192 LAL_HDF5_MUTEX_LOCK
193 hid_t retval = H5Fopen(filename, flags, access_plist);
194 LAL_HDF5_MUTEX_UNLOCK
195 return retval;
196}
197
198static inline herr_t threadsafe_H5Gclose(hid_t group_id)
199{
200 LAL_HDF5_MUTEX_LOCK
201 herr_t retval = H5Gclose(group_id);
202 LAL_HDF5_MUTEX_UNLOCK
203 return retval;
204}
205
206static inline hid_t threadsafe_H5Gcreate2(hid_t loc_id, const char *name, hid_t lcpl_id, hid_t gcpl_id, hid_t gapl_id)
207{
208 LAL_HDF5_MUTEX_LOCK
209 hid_t retval = H5Gcreate2(loc_id, name, lcpl_id, gcpl_id, gapl_id);
210 LAL_HDF5_MUTEX_UNLOCK
211 return retval;
212}
213
214static inline herr_t threadsafe_H5Gget_info(hid_t loc_id, H5G_info_t *ginfo)
215{
216 LAL_HDF5_MUTEX_LOCK
217 herr_t retval = H5Gget_info(loc_id, ginfo);
218 LAL_HDF5_MUTEX_UNLOCK
219 return retval;
220}
221
222static inline herr_t threadsafe_H5Gget_info_by_name(hid_t loc_id, const char *name, H5G_info_t *ginfo, hid_t lapl_id)
223{
224 LAL_HDF5_MUTEX_LOCK
225 herr_t retval = H5Gget_info_by_name(loc_id, name, ginfo, lapl_id);
226 LAL_HDF5_MUTEX_UNLOCK
227 return retval;
228}
229
230static inline herr_t threadsafe_H5Gget_num_objs(hid_t loc_id, hsize_t *num_objs)
231{
232 LAL_HDF5_MUTEX_LOCK
233 herr_t retval = H5Gget_num_objs(loc_id, num_objs);
234 LAL_HDF5_MUTEX_UNLOCK
235 return retval;
236}
237
238static inline herr_t threadsafe_H5Gget_objinfo(hid_t loc_id, const char *name, hbool_t follow_link, H5G_stat_t *statbuf)
239{
240 LAL_HDF5_MUTEX_LOCK
241 herr_t retval = H5Gget_objinfo(loc_id, name, follow_link, statbuf);
242 LAL_HDF5_MUTEX_UNLOCK
243 return retval;
244}
245
246static inline ssize_t threadsafe_H5Gget_objname_by_idx(hid_t loc_id, hsize_t idx, char* name, size_t size)
247{
248 LAL_HDF5_MUTEX_LOCK
249 ssize_t retval = H5Gget_objname_by_idx(loc_id, idx, name, size);
250 LAL_HDF5_MUTEX_UNLOCK
251 return retval;
252}
253
254static inline H5G_obj_t threadsafe_H5Gget_objtype_by_idx(hid_t loc_id, hsize_t idx)
255{
256 LAL_HDF5_MUTEX_LOCK
257 H5G_obj_t retval = H5Gget_objtype_by_idx(loc_id, idx);
258 LAL_HDF5_MUTEX_UNLOCK
259 return retval;
260}
261
262static inline hid_t threadsafe_H5Gopen2(hid_t loc_id, const char *name, hid_t gapl_id)
263{
264 LAL_HDF5_MUTEX_LOCK
265 hid_t retval = H5Gopen2(loc_id, name, gapl_id);
266 LAL_HDF5_MUTEX_UNLOCK
267 return retval;
268}
269
270static inline ssize_t threadsafe_H5Iget_name(hid_t id, char *name , size_t size)
271{
272 LAL_HDF5_MUTEX_LOCK
273 ssize_t retval = H5Iget_name(id, name , size);
274 LAL_HDF5_MUTEX_UNLOCK
275 return retval;
276}
277
278static inline herr_t threadsafe_H5Oclose(hid_t object_id)
279{
280 LAL_HDF5_MUTEX_LOCK
281 herr_t retval = H5Oclose(object_id);
282 LAL_HDF5_MUTEX_UNLOCK
283 return retval;
284}
285
286static inline herr_t threadsafe_H5Oget_info(hid_t loc_id, H5O_info_t *oinfo)
287{
288 LAL_HDF5_MUTEX_LOCK
289 herr_t retval = H5Oget_info(loc_id, oinfo);
290 LAL_HDF5_MUTEX_UNLOCK
291 return retval;
292}
293
294static inline herr_t threadsafe_H5Oget_info_by_idx(hid_t loc_id, const char *group_name, H5_index_t idx_type, H5_iter_order_t order, hsize_t n, H5O_info_t *oinfo, hid_t lapl_id)
295{
296 LAL_HDF5_MUTEX_LOCK
297 herr_t retval = H5Oget_info_by_idx(loc_id, group_name, idx_type, order, n, oinfo, lapl_id);
298 LAL_HDF5_MUTEX_UNLOCK
299 return retval;
300}
301
302static inline hid_t threadsafe_H5Oopen_by_addr(hid_t loc_id, haddr_t addr)
303{
304 LAL_HDF5_MUTEX_LOCK
305 hid_t retval = H5Oopen_by_addr(loc_id, addr);
306 LAL_HDF5_MUTEX_UNLOCK
307 return retval;
308}
309
310static inline herr_t threadsafe_H5Pclose(hid_t plist_id)
311{
312 LAL_HDF5_MUTEX_LOCK
313 herr_t retval = H5Pclose(plist_id);
314 LAL_HDF5_MUTEX_UNLOCK
315 return retval;
316}
317
318static inline hid_t threadsafe_H5Pcopy(hid_t plist_id)
319{
320 LAL_HDF5_MUTEX_LOCK
321 hid_t retval = H5Pcopy(plist_id);
322 LAL_HDF5_MUTEX_UNLOCK
323 return retval;
324}
325
326static inline hid_t threadsafe_H5Pcreate(hid_t cls_id)
327{
328 LAL_HDF5_MUTEX_LOCK
329 hid_t retval = H5Pcreate(cls_id);
330 LAL_HDF5_MUTEX_UNLOCK
331 return retval;
332}
333
334static inline herr_t threadsafe_H5Pset_create_intermediate_group(hid_t plist_id, unsigned crt_intmd)
335{
336 LAL_HDF5_MUTEX_LOCK
337 herr_t retval = H5Pset_create_intermediate_group(plist_id, crt_intmd);
338 LAL_HDF5_MUTEX_UNLOCK
339 return retval;
340}
341
342static inline herr_t threadsafe_H5Pset_vlen_mem_manager(hid_t plist_id, H5MM_allocate_t alloc_func, void *alloc_info, H5MM_free_t free_func, void *free_info)
343{
344 LAL_HDF5_MUTEX_LOCK
345 herr_t retval = H5Pset_vlen_mem_manager(plist_id, alloc_func, alloc_info, free_func, free_info);
346 LAL_HDF5_MUTEX_UNLOCK
347 return retval;
348}
349
350static inline herr_t threadsafe_H5Sclose(hid_t space_id)
351{
352 LAL_HDF5_MUTEX_LOCK
353 herr_t retval = H5Sclose(space_id);
354 LAL_HDF5_MUTEX_UNLOCK
355 return retval;
356}
357
358static inline hid_t threadsafe_H5Screate(H5S_class_t type)
359{
360 LAL_HDF5_MUTEX_LOCK
361 hid_t retval = H5Screate(type);
362 LAL_HDF5_MUTEX_UNLOCK
363 return retval;
364}
365
366static inline hid_t threadsafe_H5Screate_simple(int rank, const hsize_t dims[], const hsize_t maxdims[])
367{
368 LAL_HDF5_MUTEX_LOCK
369 hid_t retval = H5Screate_simple(rank, dims, maxdims);
370 LAL_HDF5_MUTEX_UNLOCK
371 return retval;
372}
373
374static inline int threadsafe_H5Sget_simple_extent_dims(hid_t space_id, hsize_t dims[], hsize_t maxdims[])
375{
376 LAL_HDF5_MUTEX_LOCK
377 int retval = H5Sget_simple_extent_dims(space_id, dims, maxdims);
378 LAL_HDF5_MUTEX_UNLOCK
379 return retval;
380}
381
382static inline int threadsafe_H5Sget_simple_extent_ndims(hid_t space_id)
383{
384 LAL_HDF5_MUTEX_LOCK
385 int retval = H5Sget_simple_extent_ndims(space_id);
386 LAL_HDF5_MUTEX_UNLOCK
387 return retval;
388}
389
390static inline hssize_t threadsafe_H5Sget_simple_extent_npoints(hid_t space_id)
391{
392 LAL_HDF5_MUTEX_LOCK
393 hssize_t retval = H5Sget_simple_extent_npoints(space_id);
394 LAL_HDF5_MUTEX_UNLOCK
395 return retval;
396}
397
398static inline herr_t threadsafe_H5TBappend_records(hid_t loc_id, const char *dset_name, hsize_t nrecords, size_t type_size, const size_t *field_offset, const size_t *dst_sizes, const void *buf)
399{
400 LAL_HDF5_MUTEX_LOCK
401 herr_t retval = H5TBappend_records(loc_id, dset_name, nrecords, type_size, field_offset, dst_sizes, buf);
402 LAL_HDF5_MUTEX_UNLOCK
403 return retval;
404}
405
406static inline herr_t threadsafe_H5TBget_field_info(hid_t loc_id, const char *dset_name, char *field_names[], size_t *field_sizes, size_t *field_offsets, size_t *type_size)
407{
408 LAL_HDF5_MUTEX_LOCK
409 herr_t retval = H5TBget_field_info(loc_id, dset_name, field_names, field_sizes, field_offsets, type_size);
410 LAL_HDF5_MUTEX_UNLOCK
411 return retval;
412}
413
414static inline herr_t threadsafe_H5TBget_table_info(hid_t loc_id, const char *dset_name, hsize_t *nfields, hsize_t *nrecords)
415{
416 LAL_HDF5_MUTEX_LOCK
417 herr_t retval = H5TBget_table_info(loc_id, dset_name, nfields, nrecords);
418 LAL_HDF5_MUTEX_UNLOCK
419 return retval;
420}
421
422static inline herr_t threadsafe_H5TBmake_table(const char *table_title, hid_t loc_id, const char *dset_name, hsize_t nfields, hsize_t nrecords, size_t type_size, const char *field_names[], const size_t *field_offset, const hid_t *field_types, hsize_t chunk_size, void *fill_data, int compress, const void *buf)
423{
424 LAL_HDF5_MUTEX_LOCK
425 herr_t retval = H5TBmake_table(table_title, loc_id, dset_name, nfields, nrecords, type_size, field_names, field_offset, field_types, chunk_size, fill_data, compress, buf);
426 LAL_HDF5_MUTEX_UNLOCK
427 return retval;
428}
429
430static inline herr_t threadsafe_H5TBread_fields_name(hid_t loc_id, const char *dset_name, const char *field_names, hsize_t start, hsize_t nrecords, size_t type_size, const size_t *field_offset, const size_t *dst_sizes, void *buf)
431{
432 LAL_HDF5_MUTEX_LOCK
433 herr_t retval = H5TBread_fields_name(loc_id, dset_name, field_names, start, nrecords, type_size, field_offset, dst_sizes, buf);
434 LAL_HDF5_MUTEX_UNLOCK
435 return retval;
436}
437
438static inline herr_t threadsafe_H5TBread_records(hid_t loc_id, const char *dset_name, hsize_t start, hsize_t nrecords, size_t type_size, const size_t *dst_offset, const size_t *dst_sizes, void *buf)
439{
440 LAL_HDF5_MUTEX_LOCK
441 herr_t retval = H5TBread_records(loc_id, dset_name, start, nrecords, type_size, dst_offset, dst_sizes, buf);
442 LAL_HDF5_MUTEX_UNLOCK
443 return retval;
444}
445
446static inline herr_t threadsafe_H5TBread_table(hid_t loc_id, const char *dset_name, size_t dst_size, const size_t *dst_offset, const size_t *dst_sizes, void *dst_buf)
447{
448 LAL_HDF5_MUTEX_LOCK
449 herr_t retval = H5TBread_table(loc_id, dset_name, dst_size, dst_offset, dst_sizes, dst_buf);
450 LAL_HDF5_MUTEX_UNLOCK
451 return retval;
452}
453
454static inline hid_t threadsafe_H5Tarray_create2(hid_t base_id, unsigned ndims, const hsize_t dim[])
455{
456 LAL_HDF5_MUTEX_LOCK
457 hid_t retval = H5Tarray_create2(base_id, ndims, dim);
458 LAL_HDF5_MUTEX_UNLOCK
459 return retval;
460}
461
462static inline herr_t threadsafe_H5Tclose(hid_t type_id)
463{
464 LAL_HDF5_MUTEX_LOCK
465 herr_t retval = H5Tclose(type_id);
466 LAL_HDF5_MUTEX_UNLOCK
467 return retval;
468}
469
470static inline hid_t threadsafe_H5Tcopy(hid_t type_id)
471{
472 LAL_HDF5_MUTEX_LOCK
473 hid_t retval = H5Tcopy(type_id);
474 LAL_HDF5_MUTEX_UNLOCK
475 return retval;
476}
477
478static inline hid_t threadsafe_H5Tcreate(H5T_class_t type, size_t size)
479{
480 LAL_HDF5_MUTEX_LOCK
481 hid_t retval = H5Tcreate(type, size);
482 LAL_HDF5_MUTEX_UNLOCK
483 return retval;
484}
485
486static inline H5T_cset_t threadsafe_H5Tget_cset(hid_t dtype_id)
487{
488 LAL_HDF5_MUTEX_LOCK
489 H5T_cset_t retval = H5Tget_cset(dtype_id);
490 LAL_HDF5_MUTEX_UNLOCK
491 return retval;
492}
493
494static inline herr_t threadsafe_H5Tset_cset(hid_t dtype_id, H5T_cset_t cset)
495{
496 LAL_HDF5_MUTEX_LOCK
497 herr_t retval = H5Tset_cset(dtype_id, cset);
498 LAL_HDF5_MUTEX_UNLOCK
499 return retval;
500}
501
502static inline H5T_str_t threadsafe_H5Tget_strpad(hid_t dtype_id)
503{
504 LAL_HDF5_MUTEX_LOCK
505 H5T_str_t retval = H5Tget_strpad(dtype_id);
506 LAL_HDF5_MUTEX_UNLOCK
507 return retval;
508}
509
510static inline htri_t threadsafe_H5Tis_variable_str(hid_t dtype_id)
511{
512 LAL_HDF5_MUTEX_LOCK
513 htri_t retval = H5Tis_variable_str(dtype_id);
514 LAL_HDF5_MUTEX_UNLOCK
515 return retval;
516}
517
518static inline hid_t threadsafe_H5Tenum_create(hid_t base_id)
519{
520 LAL_HDF5_MUTEX_LOCK
521 hid_t retval = H5Tenum_create(base_id);
522 LAL_HDF5_MUTEX_UNLOCK
523 return retval;
524}
525
526static inline herr_t threadsafe_H5Tenum_insert(hid_t type, const char *name, const void *value)
527{
528 LAL_HDF5_MUTEX_LOCK
529 herr_t retval = H5Tenum_insert(type, name, value);
530 LAL_HDF5_MUTEX_UNLOCK
531 return retval;
532}
533
534static inline int threadsafe_H5Tget_array_dims2(hid_t type_id, hsize_t dims[])
535{
536 LAL_HDF5_MUTEX_LOCK
537 int retval = H5Tget_array_dims2(type_id, dims);
538 LAL_HDF5_MUTEX_UNLOCK
539 return retval;
540}
541
542static inline int threadsafe_H5Tget_array_ndims(hid_t type_id)
543{
544 LAL_HDF5_MUTEX_LOCK
545 int retval = H5Tget_array_ndims(type_id);
546 LAL_HDF5_MUTEX_UNLOCK
547 return retval;
548}
549
550static inline H5T_class_t threadsafe_H5Tget_class(hid_t type_id)
551{
552 LAL_HDF5_MUTEX_LOCK
553 H5T_class_t retval = H5Tget_class(type_id);
554 LAL_HDF5_MUTEX_UNLOCK
555 return retval;
556}
557
558static inline H5T_class_t threadsafe_H5Tget_member_class(hid_t type_id, unsigned membno)
559{
560 LAL_HDF5_MUTEX_LOCK
561 H5T_class_t retval = H5Tget_member_class(type_id, membno);
562 LAL_HDF5_MUTEX_UNLOCK
563 return retval;
564}
565
566static inline char *threadsafe_H5Tget_member_name(hid_t type_id, unsigned membno)
567{
568 LAL_HDF5_MUTEX_LOCK
569 char *retval = H5Tget_member_name(type_id, membno);
570 LAL_HDF5_MUTEX_UNLOCK
571 return retval;
572}
573
574static inline size_t threadsafe_H5Tget_member_offset(hid_t type_id, unsigned membno)
575{
576 LAL_HDF5_MUTEX_LOCK
577 size_t retval = H5Tget_member_offset(type_id, membno);
578 LAL_HDF5_MUTEX_UNLOCK
579 return retval;
580}
581
582static inline hid_t threadsafe_H5Tget_member_type(hid_t type_id, unsigned membno)
583{
584 LAL_HDF5_MUTEX_LOCK
585 hid_t retval = H5Tget_member_type(type_id, membno);
586 LAL_HDF5_MUTEX_UNLOCK
587 return retval;
588}
589
590static inline herr_t threadsafe_H5Tget_member_value(hid_t type_id, unsigned membno, void *value)
591{
592 LAL_HDF5_MUTEX_LOCK
593 herr_t retval = H5Tget_member_value(type_id, membno, value);
594 LAL_HDF5_MUTEX_UNLOCK
595 return retval;
596}
597
598static inline hid_t threadsafe_H5Tget_native_type(hid_t type_id, H5T_direction_t direction)
599{
600 LAL_HDF5_MUTEX_LOCK
601 hid_t retval = H5Tget_native_type(type_id, direction);
602 LAL_HDF5_MUTEX_UNLOCK
603 return retval;
604}
605
606static inline int threadsafe_H5Tget_nmembers(hid_t type_id)
607{
608 LAL_HDF5_MUTEX_LOCK
609 int retval = H5Tget_nmembers(type_id);
610 LAL_HDF5_MUTEX_UNLOCK
611 return retval;
612}
613
614static inline H5T_sign_t threadsafe_H5Tget_sign(hid_t type_id)
615{
616 LAL_HDF5_MUTEX_LOCK
617 H5T_sign_t retval = H5Tget_sign(type_id);
618 LAL_HDF5_MUTEX_UNLOCK
619 return retval;
620}
621
622static inline size_t threadsafe_H5Tget_size(hid_t type_id)
623{
624 LAL_HDF5_MUTEX_LOCK
625 size_t retval = H5Tget_size(type_id);
626 LAL_HDF5_MUTEX_UNLOCK
627 return retval;
628}
629
630static inline hid_t threadsafe_H5Tget_super(hid_t type)
631{
632 LAL_HDF5_MUTEX_LOCK
633 hid_t retval = H5Tget_super(type);
634 LAL_HDF5_MUTEX_UNLOCK
635 return retval;
636}
637
638static inline herr_t threadsafe_H5Tinsert(hid_t parent_id, const char *name, size_t offset, hid_t member_id)
639{
640 LAL_HDF5_MUTEX_LOCK
641 herr_t retval = H5Tinsert(parent_id, name, offset, member_id);
642 LAL_HDF5_MUTEX_UNLOCK
643 return retval;
644}
645
646static inline herr_t threadsafe_H5Tset_size(hid_t type_id, size_t size)
647{
648 LAL_HDF5_MUTEX_LOCK
649 herr_t retval = H5Tset_size(type_id, size);
650 LAL_HDF5_MUTEX_UNLOCK
651 return retval;
652}
653
654static inline herr_t threadsafe_H5check_version(unsigned majnum, unsigned minnum, unsigned relnum)
655{
656 LAL_HDF5_MUTEX_LOCK
657 herr_t retval = H5check_version(majnum, minnum, relnum);
658 LAL_HDF5_MUTEX_UNLOCK
659 return retval;
660}
661
662static inline herr_t threadsafe_H5open(void)
663{
664 LAL_HDF5_MUTEX_LOCK
665 herr_t retval = H5open();
666 LAL_HDF5_MUTEX_UNLOCK
667 return retval;
668}
669
670#undef LAL_HDF5_MUTEX_LOCK
671#undef LAL_HDF5_MUTEX_UNLOCK
672
673#else /* either the HDF5 library is threadsafe, or LAL does not require */
674
675/* use regular HDF library routines */
676
677#define threadsafe_H5Aclose H5Aclose
678#define threadsafe_H5Acreate2 H5Acreate2
679#define threadsafe_H5Aget_name H5Aget_name
680#define threadsafe_H5Aget_num_attrs H5Aget_num_attrs
681#define threadsafe_H5Aget_space H5Aget_space
682#define threadsafe_H5Aget_type H5Aget_type
683#define threadsafe_H5Aopen H5Aopen
684#define threadsafe_H5Aopen_idx H5Aopen_idx
685#define threadsafe_H5Aread H5Aread
686#define threadsafe_H5Awrite H5Awrite
687#define threadsafe_H5Dclose H5Dclose
688#define threadsafe_H5Dcreate2 H5Dcreate2
689#define threadsafe_H5Dget_space H5Dget_space
690#define threadsafe_H5Dget_type H5Dget_type
691#define threadsafe_H5Dopen2 H5Dopen2
692#define threadsafe_H5Dread H5Dread
693#define threadsafe_H5Dvlen_reclaim H5Dvlen_reclaim
694#define threadsafe_H5Dwrite H5Dwrite
695#define threadsafe_H5Fclose H5Fclose
696#define threadsafe_H5Fcreate H5Fcreate
697#define threadsafe_H5Fflush H5Fflush
698#define threadsafe_H5Fget_name H5Fget_name
699#define threadsafe_H5Fopen H5Fopen
700#define threadsafe_H5Gclose H5Gclose
701#define threadsafe_H5Gcreate2 H5Gcreate2
702#define threadsafe_H5Gget_info H5Gget_info
703#define threadsafe_H5Gget_info_by_name H5Gget_info_by_name
704#define threadsafe_H5Gget_num_objs H5Gget_num_objs
705#define threadsafe_H5Gget_objinfo H5Gget_objinfo
706#define threadsafe_H5Gget_objname_by_idx H5Gget_objname_by_idx
707#define threadsafe_H5Gget_objtype_by_idx H5Gget_objtype_by_idx
708#define threadsafe_H5Gopen2 H5Gopen2
709#define threadsafe_H5Iget_name H5Iget_name
710#define threadsafe_H5Oclose H5Oclose
711#define threadsafe_H5Oget_info H5Oget_info
712#define threadsafe_H5Oget_info_by_idx H5Oget_info_by_idx
713#define threadsafe_H5Oopen_by_addr H5Oopen_by_addr
714#define threadsafe_H5Pclose H5Pclose
715#define threadsafe_H5Pcopy H5Pcopy
716#define threadsafe_H5Pcreate H5Pcreate
717#define threadsafe_H5Pset_create_intermediate_group H5Pset_create_intermediate_group
718#define threadsafe_H5Pset_vlen_mem_manager H5Pset_vlen_mem_manager
719#define threadsafe_H5Sclose H5Sclose
720#define threadsafe_H5Screate H5Screate
721#define threadsafe_H5Screate_simple H5Screate_simple
722#define threadsafe_H5Sget_simple_extent_dims H5Sget_simple_extent_dims
723#define threadsafe_H5Sget_simple_extent_ndims H5Sget_simple_extent_ndims
724#define threadsafe_H5Sget_simple_extent_npoints H5Sget_simple_extent_npoints
725#define threadsafe_H5TBappend_records H5TBappend_records
726#define threadsafe_H5TBget_field_info H5TBget_field_info
727#define threadsafe_H5TBget_table_info H5TBget_table_info
728#define threadsafe_H5TBmake_table H5TBmake_table
729#define threadsafe_H5TBread_fields_name H5TBread_fields_name
730#define threadsafe_H5TBread_records H5TBread_records
731#define threadsafe_H5TBread_table H5TBread_table
732#define threadsafe_H5Tarray_create2 H5Tarray_create2
733#define threadsafe_H5Tclose H5Tclose
734#define threadsafe_H5Tcopy H5Tcopy
735#define threadsafe_H5Tcreate H5Tcreate
736#define threadsafe_H5Tget_cset H5Tget_cset
737#define threadsafe_H5Tset_cset H5Tset_cset
738#define threadsafe_H5Tget_strpad H5Tget_strpad
739#define threadsafe_H5Tis_variable_str H5Tis_variable_str
740#define threadsafe_H5Tenum_create H5Tenum_create
741#define threadsafe_H5Tenum_insert H5Tenum_insert
742#define threadsafe_H5Tget_array_dims2 H5Tget_array_dims2
743#define threadsafe_H5Tget_array_ndims H5Tget_array_ndims
744#define threadsafe_H5Tget_class H5Tget_class
745#define threadsafe_H5Tget_member_class H5Tget_member_class
746#define threadsafe_H5Tget_member_name H5Tget_member_name
747#define threadsafe_H5Tget_member_offset H5Tget_member_offset
748#define threadsafe_H5Tget_member_type H5Tget_member_type
749#define threadsafe_H5Tget_member_value H5Tget_member_value
750#define threadsafe_H5Tget_native_type H5Tget_native_type
751#define threadsafe_H5Tget_nmembers H5Tget_nmembers
752#define threadsafe_H5Tget_sign H5Tget_sign
753#define threadsafe_H5Tget_size H5Tget_size
754#define threadsafe_H5Tget_super H5Tget_super
755#define threadsafe_H5Tinsert H5Tinsert
756#define threadsafe_H5Tset_size H5Tset_size
757#define threadsafe_H5check_version H5check_version
758#define threadsafe_H5open H5open
759
760#endif
761
762#endif /* HAVE_HDF5 */
const char *const name
type name
Definition: UserInput.c:193