LAL  7.5.0.1-b72065a
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>
8 static 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 
14 static 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 
22 static 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 
30 static 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 
38 static 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 
46 static 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 
54 static 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 
62 static 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 
70 static 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 
78 static 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 
86 static 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 
94 static 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 
102 static 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 
110 static 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 
118 static 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 
126 static 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 
134 static 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 
142 static 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 
150 static 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 
158 static 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 
166 static 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 
174 static 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 
182 static 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 
190 static 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 
198 static 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 
206 static 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 
214 static 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 
222 static 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 
230 static 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 
238 static 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 
246 static 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 
254 static 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 
262 static 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 
270 static 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 
278 static 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 
286 static 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 
294 static 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 
302 static 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 
310 static 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 
318 static 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 
326 static 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 
334 static 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 
342 static 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 
350 static 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 
358 static 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 
366 static 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 
374 static 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 
382 static 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 
390 static 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 
398 static 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 
406 static 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 
414 static 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 
422 static 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 
430 static 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 
438 static 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 
446 static 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 
454 static 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 
462 static 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 
470 static 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 
478 static 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 
486 static inline hid_t threadsafe_H5Tenum_create(hid_t base_id)
487 {
488  LAL_HDF5_MUTEX_LOCK
489  hid_t retval = H5Tenum_create(base_id);
490  LAL_HDF5_MUTEX_UNLOCK
491  return retval;
492 }
493 
494 static inline herr_t threadsafe_H5Tenum_insert(hid_t type, const char *name, const void *value)
495 {
496  LAL_HDF5_MUTEX_LOCK
497  herr_t retval = H5Tenum_insert(type, name, value);
498  LAL_HDF5_MUTEX_UNLOCK
499  return retval;
500 }
501 
502 static inline int threadsafe_H5Tget_array_dims2(hid_t type_id, hsize_t dims[])
503 {
504  LAL_HDF5_MUTEX_LOCK
505  int retval = H5Tget_array_dims2(type_id, dims);
506  LAL_HDF5_MUTEX_UNLOCK
507  return retval;
508 }
509 
510 static inline int threadsafe_H5Tget_array_ndims(hid_t type_id)
511 {
512  LAL_HDF5_MUTEX_LOCK
513  int retval = H5Tget_array_ndims(type_id);
514  LAL_HDF5_MUTEX_UNLOCK
515  return retval;
516 }
517 
518 static inline H5T_class_t threadsafe_H5Tget_class(hid_t type_id)
519 {
520  LAL_HDF5_MUTEX_LOCK
521  H5T_class_t retval = H5Tget_class(type_id);
522  LAL_HDF5_MUTEX_UNLOCK
523  return retval;
524 }
525 
526 static inline H5T_class_t threadsafe_H5Tget_member_class(hid_t type_id, unsigned membno)
527 {
528  LAL_HDF5_MUTEX_LOCK
529  H5T_class_t retval = H5Tget_member_class(type_id, membno);
530  LAL_HDF5_MUTEX_UNLOCK
531  return retval;
532 }
533 
534 static inline char *threadsafe_H5Tget_member_name(hid_t type_id, unsigned membno)
535 {
536  LAL_HDF5_MUTEX_LOCK
537  char *retval = H5Tget_member_name(type_id, membno);
538  LAL_HDF5_MUTEX_UNLOCK
539  return retval;
540 }
541 
542 static inline size_t threadsafe_H5Tget_member_offset(hid_t type_id, unsigned membno)
543 {
544  LAL_HDF5_MUTEX_LOCK
545  size_t retval = H5Tget_member_offset(type_id, membno);
546  LAL_HDF5_MUTEX_UNLOCK
547  return retval;
548 }
549 
550 static inline hid_t threadsafe_H5Tget_member_type(hid_t type_id, unsigned membno)
551 {
552  LAL_HDF5_MUTEX_LOCK
553  hid_t retval = H5Tget_member_type(type_id, membno);
554  LAL_HDF5_MUTEX_UNLOCK
555  return retval;
556 }
557 
558 static inline herr_t threadsafe_H5Tget_member_value(hid_t type_id, unsigned membno, void *value)
559 {
560  LAL_HDF5_MUTEX_LOCK
561  herr_t retval = H5Tget_member_value(type_id, membno, value);
562  LAL_HDF5_MUTEX_UNLOCK
563  return retval;
564 }
565 
566 static inline hid_t threadsafe_H5Tget_native_type(hid_t type_id, H5T_direction_t direction)
567 {
568  LAL_HDF5_MUTEX_LOCK
569  hid_t retval = H5Tget_native_type(type_id, direction);
570  LAL_HDF5_MUTEX_UNLOCK
571  return retval;
572 }
573 
574 static inline int threadsafe_H5Tget_nmembers(hid_t type_id)
575 {
576  LAL_HDF5_MUTEX_LOCK
577  int retval = H5Tget_nmembers(type_id);
578  LAL_HDF5_MUTEX_UNLOCK
579  return retval;
580 }
581 
582 static inline H5T_sign_t threadsafe_H5Tget_sign(hid_t type_id)
583 {
584  LAL_HDF5_MUTEX_LOCK
585  H5T_sign_t retval = H5Tget_sign(type_id);
586  LAL_HDF5_MUTEX_UNLOCK
587  return retval;
588 }
589 
590 static inline size_t threadsafe_H5Tget_size(hid_t type_id)
591 {
592  LAL_HDF5_MUTEX_LOCK
593  size_t retval = H5Tget_size(type_id);
594  LAL_HDF5_MUTEX_UNLOCK
595  return retval;
596 }
597 
598 static inline hid_t threadsafe_H5Tget_super(hid_t type)
599 {
600  LAL_HDF5_MUTEX_LOCK
601  hid_t retval = H5Tget_super(type);
602  LAL_HDF5_MUTEX_UNLOCK
603  return retval;
604 }
605 
606 static inline herr_t threadsafe_H5Tinsert(hid_t parent_id, const char *name, size_t offset, hid_t member_id)
607 {
608  LAL_HDF5_MUTEX_LOCK
609  herr_t retval = H5Tinsert(parent_id, name, offset, member_id);
610  LAL_HDF5_MUTEX_UNLOCK
611  return retval;
612 }
613 
614 static inline herr_t threadsafe_H5Tset_size(hid_t type_id, size_t size)
615 {
616  LAL_HDF5_MUTEX_LOCK
617  herr_t retval = H5Tset_size(type_id, size);
618  LAL_HDF5_MUTEX_UNLOCK
619  return retval;
620 }
621 
622 static inline herr_t threadsafe_H5check_version(unsigned majnum, unsigned minnum, unsigned relnum)
623 {
624  LAL_HDF5_MUTEX_LOCK
625  herr_t retval = H5check_version(majnum, minnum, relnum);
626  LAL_HDF5_MUTEX_UNLOCK
627  return retval;
628 }
629 
630 static inline herr_t threadsafe_H5open(void)
631 {
632  LAL_HDF5_MUTEX_LOCK
633  herr_t retval = H5open();
634  LAL_HDF5_MUTEX_UNLOCK
635  return retval;
636 }
637 
638 #undef LAL_HDF5_MUTEX_LOCK
639 #undef LAL_HDF5_MUTEX_UNLOCK
640 
641 #else /* either the HDF5 library is threadsafe, or LAL does not require */
642 
643 /* use regular HDF library routines */
644 
645 #define threadsafe_H5Aclose H5Aclose
646 #define threadsafe_H5Acreate2 H5Acreate2
647 #define threadsafe_H5Aget_name H5Aget_name
648 #define threadsafe_H5Aget_num_attrs H5Aget_num_attrs
649 #define threadsafe_H5Aget_space H5Aget_space
650 #define threadsafe_H5Aget_type H5Aget_type
651 #define threadsafe_H5Aopen H5Aopen
652 #define threadsafe_H5Aopen_idx H5Aopen_idx
653 #define threadsafe_H5Aread H5Aread
654 #define threadsafe_H5Awrite H5Awrite
655 #define threadsafe_H5Dclose H5Dclose
656 #define threadsafe_H5Dcreate2 H5Dcreate2
657 #define threadsafe_H5Dget_space H5Dget_space
658 #define threadsafe_H5Dget_type H5Dget_type
659 #define threadsafe_H5Dopen2 H5Dopen2
660 #define threadsafe_H5Dread H5Dread
661 #define threadsafe_H5Dvlen_reclaim H5Dvlen_reclaim
662 #define threadsafe_H5Dwrite H5Dwrite
663 #define threadsafe_H5Fclose H5Fclose
664 #define threadsafe_H5Fcreate H5Fcreate
665 #define threadsafe_H5Fflush H5Fflush
666 #define threadsafe_H5Fget_name H5Fget_name
667 #define threadsafe_H5Fopen H5Fopen
668 #define threadsafe_H5Gclose H5Gclose
669 #define threadsafe_H5Gcreate2 H5Gcreate2
670 #define threadsafe_H5Gget_info H5Gget_info
671 #define threadsafe_H5Gget_info_by_name H5Gget_info_by_name
672 #define threadsafe_H5Gget_num_objs H5Gget_num_objs
673 #define threadsafe_H5Gget_objinfo H5Gget_objinfo
674 #define threadsafe_H5Gget_objname_by_idx H5Gget_objname_by_idx
675 #define threadsafe_H5Gget_objtype_by_idx H5Gget_objtype_by_idx
676 #define threadsafe_H5Gopen2 H5Gopen2
677 #define threadsafe_H5Iget_name H5Iget_name
678 #define threadsafe_H5Oclose H5Oclose
679 #define threadsafe_H5Oget_info H5Oget_info
680 #define threadsafe_H5Oget_info_by_idx H5Oget_info_by_idx
681 #define threadsafe_H5Oopen_by_addr H5Oopen_by_addr
682 #define threadsafe_H5Pclose H5Pclose
683 #define threadsafe_H5Pcopy H5Pcopy
684 #define threadsafe_H5Pcreate H5Pcreate
685 #define threadsafe_H5Pset_create_intermediate_group H5Pset_create_intermediate_group
686 #define threadsafe_H5Pset_vlen_mem_manager H5Pset_vlen_mem_manager
687 #define threadsafe_H5Sclose H5Sclose
688 #define threadsafe_H5Screate H5Screate
689 #define threadsafe_H5Screate_simple H5Screate_simple
690 #define threadsafe_H5Sget_simple_extent_dims H5Sget_simple_extent_dims
691 #define threadsafe_H5Sget_simple_extent_ndims H5Sget_simple_extent_ndims
692 #define threadsafe_H5Sget_simple_extent_npoints H5Sget_simple_extent_npoints
693 #define threadsafe_H5TBappend_records H5TBappend_records
694 #define threadsafe_H5TBget_field_info H5TBget_field_info
695 #define threadsafe_H5TBget_table_info H5TBget_table_info
696 #define threadsafe_H5TBmake_table H5TBmake_table
697 #define threadsafe_H5TBread_fields_name H5TBread_fields_name
698 #define threadsafe_H5TBread_records H5TBread_records
699 #define threadsafe_H5TBread_table H5TBread_table
700 #define threadsafe_H5Tarray_create2 H5Tarray_create2
701 #define threadsafe_H5Tclose H5Tclose
702 #define threadsafe_H5Tcopy H5Tcopy
703 #define threadsafe_H5Tcreate H5Tcreate
704 #define threadsafe_H5Tenum_create H5Tenum_create
705 #define threadsafe_H5Tenum_insert H5Tenum_insert
706 #define threadsafe_H5Tget_array_dims2 H5Tget_array_dims2
707 #define threadsafe_H5Tget_array_ndims H5Tget_array_ndims
708 #define threadsafe_H5Tget_class H5Tget_class
709 #define threadsafe_H5Tget_member_class H5Tget_member_class
710 #define threadsafe_H5Tget_member_name H5Tget_member_name
711 #define threadsafe_H5Tget_member_offset H5Tget_member_offset
712 #define threadsafe_H5Tget_member_type H5Tget_member_type
713 #define threadsafe_H5Tget_member_value H5Tget_member_value
714 #define threadsafe_H5Tget_native_type H5Tget_native_type
715 #define threadsafe_H5Tget_nmembers H5Tget_nmembers
716 #define threadsafe_H5Tget_sign H5Tget_sign
717 #define threadsafe_H5Tget_size H5Tget_size
718 #define threadsafe_H5Tget_super H5Tget_super
719 #define threadsafe_H5Tinsert H5Tinsert
720 #define threadsafe_H5Tset_size H5Tset_size
721 #define threadsafe_H5check_version H5check_version
722 #define threadsafe_H5open H5open
723 
724 #endif
725 
726 #endif /* HAVE_HDF5 */
const char *const name
type name
Definition: UserInput.c:193