mirror of
https://github.com/HDFGroup/hdf5.git
synced 2024-11-27 02:10:55 +08:00
Fix issue with H5_now_usec() with 32 bit systems (#1416)
* Implement H5ESget_requests() to retrieve request pointers and corresponding connector IDs from an event set. Add tests for this function. * Add "order" parameter to H5ESget_requests, to allow the user to specify the order in which requests are returned. * Fix bugs with H5ESinsert_request() * Change H5ESget_requests() API to have separate input and output parameters for the allocated array length(s) (in) and the number of events in the event set (out). * Fix issue with H5_now_usec() with 32 bit systems. Also improve event set test. * Committing clang-format changes * Add comments to H5_now_usec() explaining rationale for uint64_t casts. Co-authored-by: github-actions <41898282+github-actions[bot]@users.noreply.github.com>
This commit is contained in:
parent
01092658a3
commit
0f847f30bc
@ -193,17 +193,26 @@ H5_now_usec(void)
|
||||
struct timespec ts;
|
||||
|
||||
HDclock_gettime(CLOCK_MONOTONIC, &ts);
|
||||
now = (uint64_t)(ts.tv_sec * (1000 * 1000)) + (uint64_t)(ts.tv_nsec / 1000);
|
||||
|
||||
/* Cast all values in this expression to uint64_t to ensure that all intermediate
|
||||
* calculations are done in 64 bit, to prevent overflow */
|
||||
now = ((uint64_t)ts.tv_sec * ((uint64_t)1000 * (uint64_t)1000)) +
|
||||
((uint64_t)ts.tv_nsec / (uint64_t)1000);
|
||||
}
|
||||
#elif defined(H5_HAVE_GETTIMEOFDAY)
|
||||
{
|
||||
struct timeval now_tv;
|
||||
|
||||
HDgettimeofday(&now_tv, NULL);
|
||||
now = (uint64_t)(now_tv.tv_sec * (1000 * 1000)) + (uint64_t)now_tv.tv_usec;
|
||||
|
||||
/* Cast all values in this expression to uint64_t to ensure that all intermediate
|
||||
* calculations are done in 64 bit, to prevent overflow */
|
||||
now = ((uint64_t)now_tv.tv_sec * ((uint64_t)1000 * (uint64_t)1000)) + (uint64_t)now_tv.tv_usec;
|
||||
}
|
||||
#else /* H5_HAVE_GETTIMEOFDAY */
|
||||
now = (uint64_t)(HDtime(NULL) * (1000 * 1000));
|
||||
/* Cast all values in this expression to uint64_t to ensure that all intermediate calculations
|
||||
* are done in 64 bit, to prevent overflow */
|
||||
now = ((uint64_t)HDtime(NULL) * ((uint64_t)1000 * (uint64_t)1000));
|
||||
#endif /* H5_HAVE_GETTIMEOFDAY */
|
||||
|
||||
return (now);
|
||||
|
@ -344,25 +344,49 @@ test_es_get_requests(void)
|
||||
TEST_ERROR
|
||||
|
||||
/* Get only connector IDs */
|
||||
count = 3;
|
||||
count = 3;
|
||||
connector_ids[0] = H5I_INVALID_HID;
|
||||
connector_ids[1] = H5I_INVALID_HID;
|
||||
if (H5ESget_requests(es_id, H5_ITER_NATIVE, connector_ids, NULL, 2, &count) < 0)
|
||||
TEST_ERROR
|
||||
if (count != 0)
|
||||
TEST_ERROR
|
||||
if (connector_ids[0] != H5I_INVALID_HID)
|
||||
TEST_ERROR
|
||||
if (connector_ids[1] != H5I_INVALID_HID)
|
||||
TEST_ERROR
|
||||
|
||||
/* Get only requests */
|
||||
count = 3;
|
||||
count = 3;
|
||||
requests[0] = NULL;
|
||||
requests[1] = NULL;
|
||||
if (H5ESget_requests(es_id, H5_ITER_NATIVE, NULL, requests, 2, &count) < 0)
|
||||
TEST_ERROR
|
||||
if (count != 0)
|
||||
TEST_ERROR
|
||||
if (requests[0] != NULL)
|
||||
TEST_ERROR
|
||||
if (requests[1] != NULL)
|
||||
TEST_ERROR
|
||||
|
||||
/* Get both */
|
||||
count = 3;
|
||||
count = 3;
|
||||
connector_ids[0] = H5I_INVALID_HID;
|
||||
connector_ids[1] = H5I_INVALID_HID;
|
||||
requests[0] = NULL;
|
||||
requests[1] = NULL;
|
||||
if (H5ESget_requests(es_id, H5_ITER_NATIVE, connector_ids, requests, 2, &count) < 0)
|
||||
TEST_ERROR
|
||||
if (count != 0)
|
||||
TEST_ERROR
|
||||
if (connector_ids[0] != H5I_INVALID_HID)
|
||||
TEST_ERROR
|
||||
if (connector_ids[1] != H5I_INVALID_HID)
|
||||
TEST_ERROR
|
||||
if (requests[0] != NULL)
|
||||
TEST_ERROR
|
||||
if (requests[1] != NULL)
|
||||
TEST_ERROR
|
||||
|
||||
/* Insert event into event set */
|
||||
if (H5ESinsert_request(es_id, connector_ids_g[0], &req_targets[0]) < 0)
|
||||
|
Loading…
Reference in New Issue
Block a user