diff options
author | Dana Robinson <43805+derobins@users.noreply.github.com> | 2021-03-23 21:36:00 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2021-03-23 21:36:00 (GMT) |
commit | 13d4ed7e3a7500ccfabc8837c15bb8ec3f164350 (patch) | |
tree | ff15801afc4852cbd23ec515e17e1478a45eb152 | |
parent | 1598238b2f2364957d6390f99edb9a49a8e18d3d (diff) | |
parent | 915e36f1d2217cd8f5f614ae975c8b4d97f7c5b5 (diff) | |
download | hdf5-13d4ed7e3a7500ccfabc8837c15bb8ec3f164350.zip hdf5-13d4ed7e3a7500ccfabc8837c15bb8ec3f164350.tar.gz hdf5-13d4ed7e3a7500ccfabc8837c15bb8ec3f164350.tar.bz2 |
Merge pull request #504 from derobins/vfd_swmr/hide_timespeccmp
Protects timespeccmp
-rw-r--r-- | MANIFEST | 1 | ||||
-rw-r--r-- | config/cmake/H5pubconf.h.in | 3 | ||||
-rw-r--r-- | config/cmake_ext_mod/ConfigureChecks.cmake | 1 | ||||
-rw-r--r-- | configure.ac | 2 | ||||
-rw-r--r-- | src/H5Fvfd_swmr.c | 6 | ||||
-rw-r--r-- | src/H5private.h | 11 | ||||
-rw-r--r-- | src/H5time_private.h | 109 |
7 files changed, 18 insertions, 115 deletions
@@ -1035,7 +1035,6 @@ ./src/H5Ztrans.c ./src/H5queue.h ./src/H5retry_private.h -./src/H5time_private.h ./src/H5win32defs.h ./src/Makefile.am ./src/hdf5.h diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in index 24adb1a..5f6b67f 100644 --- a/config/cmake/H5pubconf.h.in +++ b/config/cmake/H5pubconf.h.in @@ -444,6 +444,9 @@ # cmakedefine H5_HAVE_THREADSAFE @H5_HAVE_THREADSAFE@ #endif +/* Define to 1 if you have the `timespeccmp' function. */ +#cmakedefine H5_HAVE_TIMESPECCMP @H5_HAVE_TIMESPECCMP@ + /* Define if timezone is a global variable */ #cmakedefine H5_HAVE_TIMEZONE @H5_HAVE_TIMEZONE@ diff --git a/config/cmake_ext_mod/ConfigureChecks.cmake b/config/cmake_ext_mod/ConfigureChecks.cmake index 18aed24..1fce173 100644 --- a/config/cmake_ext_mod/ConfigureChecks.cmake +++ b/config/cmake_ext_mod/ConfigureChecks.cmake @@ -530,6 +530,7 @@ CHECK_FUNCTION_EXISTS (symlink ${HDF_PREFIX}_HAVE_SYMLINK) CHECK_FUNCTION_EXISTS (system ${HDF_PREFIX}_HAVE_SYSTEM) CHECK_FUNCTION_EXISTS (tmpfile ${HDF_PREFIX}_HAVE_TMPFILE) +CHECK_FUNCTION_EXISTS (timespeccmp ${HDF_PREFIX}_HAVE_TIMESPECCMP) CHECK_FUNCTION_EXISTS (asprintf ${HDF_PREFIX}_HAVE_ASPRINTF) CHECK_FUNCTION_EXISTS (vasprintf ${HDF_PREFIX}_HAVE_VASPRINTF) CHECK_FUNCTION_EXISTS (waitpid ${HDF_PREFIX}_HAVE_WAITPID) diff --git a/configure.ac b/configure.ac index 9e241a8..2efe9d6 100644 --- a/configure.ac +++ b/configure.ac @@ -1959,7 +1959,7 @@ AC_CHECK_FUNCS([frexpl gethostname getrusage gettimeofday]) AC_CHECK_FUNCS([lstat rand_r random setsysinfo]) AC_CHECK_FUNCS([signal longjmp setjmp siglongjmp sigsetjmp sigprocmask]) AC_CHECK_FUNCS([sigtimedwait snprintf srandom strdup symlink system]) -AC_CHECK_FUNCS([strtoll strtoull]) +AC_CHECK_FUNCS([strtoll strtoull timespeccmp]) AC_CHECK_FUNCS([tmpfile asprintf vasprintf vsnprintf waitpid]) AC_CHECK_FUNCS([roundf lroundf llroundf round lround llround]) diff --git a/src/H5Fvfd_swmr.c b/src/H5Fvfd_swmr.c index 0b0befd..b55f157 100644 --- a/src/H5Fvfd_swmr.c +++ b/src/H5Fvfd_swmr.c @@ -1320,7 +1320,7 @@ insert_eot_entry(eot_queue_entry_t *entry_ptr) /* Find the insertion point for the entry on the EOT queue */ TAILQ_FOREACH_REVERSE(prec_ptr, &eot_queue_g, eot_queue, link) { - if (timespeccmp(&prec_ptr->end_of_tick, &entry_ptr->end_of_tick, <=)) + if (HDtimespeccmp(&prec_ptr->end_of_tick, &entry_ptr->end_of_tick, <=)) break; } @@ -1964,7 +1964,7 @@ H5F_vfd_swmr_process_eot_queue(hbool_t entering_api) HGOTO_ERROR(H5E_FILE, H5E_CANTGET, FAIL, "can't get time via clock_gettime"); } #endif - if(timespeccmp(&now, &head->end_of_tick, <)) + if(HDtimespeccmp(&now, &head->end_of_tick, <)) break; /* If the H5F_shared_t is labeled with a later EOT time than * the queue entry is, then we have already performed the @@ -1972,7 +1972,7 @@ H5F_vfd_swmr_process_eot_queue(hbool_t entering_api) * multiple H5F_t share the H5F_shared_t. Just update the * EOT queue entry and move to the next. */ - if (timespeccmp(&head->end_of_tick, &shared->end_of_tick, <)) { + if (HDtimespeccmp(&head->end_of_tick, &shared->end_of_tick, <)) { H5F_vfd_swmr_update_entry_eot(head); } else if (shared->vfd_swmr_writer) { if (H5F_vfd_swmr_writer_end_of_tick(f, FALSE) < 0) diff --git a/src/H5private.h b/src/H5private.h index 66763b2..b57918d 100644 --- a/src/H5private.h +++ b/src/H5private.h @@ -1588,6 +1588,16 @@ typedef off_t h5_stat_size_t; #ifndef HDtimes #define HDtimes(T) times(T) #endif /* HDtimes*/ +#ifndef HDtimespeccmp +#ifdef H5_HAVE_TIMESPECCMP + #define HDtimespeccmp(tsp, usp, cmp) timespeccmp(tsp, usp, cmp) +#else +#define HDtimespeccmp(tsp, usp, cmp) \ + (((tsp)->tv_sec == (usp)->tv_sec) ? \ + ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \ + ((tsp)->tv_sec cmp (usp)->tv_sec)) +#endif +#endif /* HDtimespeccmp */ #ifndef HDtmpfile #define HDtmpfile() tmpfile() #endif /* HDtmpfile */ @@ -2200,7 +2210,6 @@ H5_DLL herr_t H5CX_pop(void); BEGIN_MPE_LOG #include "H5FDvfd_swmr_private.h" -#include "H5time_private.h" /* for timespeccmp */ #define VFD_SWMR_ENTER(err) \ do { \ diff --git a/src/H5time_private.h b/src/H5time_private.h deleted file mode 100644 index 603c273..0000000 --- a/src/H5time_private.h +++ /dev/null @@ -1,109 +0,0 @@ -/* - * Copyright (c) 2019 The HDF Group. 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. - */ - -/* - * Portions of this file derive from <sys/time.h> in NetBSD. Applicable - * copyright notices and licenses are reproduced here: - */ - -/*- - * Copyright (c) 2017 The NetBSD Foundation, Inc. - * All rights reserved. - * - * This code is derived from software contributed to The NetBSD Foundation - * by - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * - * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS - * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED - * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR - * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS - * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF - * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS - * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN - * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) - * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE - * POSSIBILITY OF SUCH DAMAGE. - */ -/* - * Copyright (c) 1982, 1986, 1993 - * The Regents of the University of California. All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * 3. Neither the name of the University nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND - * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE - * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS - * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) - * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT - * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY - * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF - * SUCH DAMAGE. - * - * @(#)time.h 8.5 (Berkeley) 5/4/95 - */ - -#ifndef H5time_private_H -#define H5time_private_H - -#ifdef __NetBSD__ -#include <sys/time.h> -#else -#define timespecclear(tsp) (tsp)->tv_sec = (time_t)((tsp)->tv_nsec = 0L) -#define timespecisset(tsp) ((tsp)->tv_sec || (tsp)->tv_nsec) -#define timespeccmp(tsp, usp, cmp) \ - (((tsp)->tv_sec == (usp)->tv_sec) ? \ - ((tsp)->tv_nsec cmp (usp)->tv_nsec) : \ - ((tsp)->tv_sec cmp (usp)->tv_sec)) -#define timespecadd(tsp, usp, vsp) \ - do { \ - (vsp)->tv_sec = (tsp)->tv_sec + (usp)->tv_sec; \ - (vsp)->tv_nsec = (tsp)->tv_nsec + (usp)->tv_nsec; \ - if ((vsp)->tv_nsec >= 1000000000L) { \ - (vsp)->tv_sec++; \ - (vsp)->tv_nsec -= 1000000000L; \ - } \ - } while (/* CONSTCOND */ 0) -#define timespecsub(tsp, usp, vsp) \ - do { \ - (vsp)->tv_sec = (tsp)->tv_sec - (usp)->tv_sec; \ - (vsp)->tv_nsec = (tsp)->tv_nsec - (usp)->tv_nsec; \ - if ((vsp)->tv_nsec < 0) { \ - (vsp)->tv_sec--; \ - (vsp)->tv_nsec += 1000000000L; \ - } \ - } while (/* CONSTCOND */ 0) -#define timespec2ns(x) (((uint64_t)(x)->tv_sec) * 1000000000UL + (uint64_t)(x)->tv_nsec) -#endif - -#endif /* H5time_private_H */ |