summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPeter Pettersson <boretrk@hotmail.com>2021-07-15 21:00:02 +0200
committerPeter Pettersson <boretrk@hotmail.com>2021-07-15 21:00:02 +0200
commite4e173e8744dbdf9bed4b814f1af6a8080c4c603 (patch)
treeea41de624aae1e2289813c442bd7cc6508174ebf /src
parentf15a6792d382f7a9bf6d5c638417f2b436a144a9 (diff)
downloadlibgit2-e4e173e8744dbdf9bed4b814f1af6a8080c4c603.tar.gz
Allow compilation on systems without CLOCK_MONOTONIC
Makes usage of CLOCK_MONOTONIC conditional and makes functions that uses git__timer handle clock resynchronization. Call gettimeofday with tzp set to NULL as required by https://pubs.opengroup.org/onlinepubs/9699919799/functions/gettimeofday.html
Diffstat (limited to 'src')
-rw-r--r--src/pack-objects.c4
-rw-r--r--src/transports/smart_protocol.c3
-rw-r--r--src/util.h18
3 files changed, 13 insertions, 12 deletions
diff --git a/src/pack-objects.c b/src/pack-objects.c
index f9d8bfd35..2c964b125 100644
--- a/src/pack-objects.c
+++ b/src/pack-objects.c
@@ -251,7 +251,7 @@ int git_packbuilder_insert(git_packbuilder *pb, const git_oid *oid,
double current_time = git__timer();
double elapsed = current_time - pb->last_progress_report_time;
- if (elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
+ if (elapsed < 0 || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
pb->last_progress_report_time = current_time;
ret = pb->progress_cb(
@@ -922,7 +922,7 @@ static int report_delta_progress(
double current_time = git__timer();
double elapsed = current_time - pb->last_progress_report_time;
- if (force || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
+ if (force || elapsed < 0 || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
pb->last_progress_report_time = current_time;
ret = pb->progress_cb(
diff --git a/src/transports/smart_protocol.c b/src/transports/smart_protocol.c
index 9482915d8..91de163e9 100644
--- a/src/transports/smart_protocol.c
+++ b/src/transports/smart_protocol.c
@@ -975,9 +975,10 @@ static int stream_thunk(void *buf, size_t size, void *data)
if (payload->cb) {
double current_time = git__timer();
+ double elapsed = current_time - payload->last_progress_report_time;
payload->last_bytes += size;
- if ((current_time - payload->last_progress_report_time) >= MIN_PROGRESS_UPDATE_INTERVAL) {
+ if (elapsed < 0 || elapsed >= MIN_PROGRESS_UPDATE_INTERVAL) {
payload->last_progress_report_time = current_time;
error = payload->cb(payload->pb->nr_written, payload->pb->nr_objects, payload->last_bytes, payload->cb_payload);
}
diff --git a/src/util.h b/src/util.h
index dd80c7868..1c6677b0e 100644
--- a/src/util.h
+++ b/src/util.h
@@ -376,17 +376,17 @@ GIT_INLINE(double) git__timer(void)
GIT_INLINE(double) git__timer(void)
{
- struct timespec tp;
+ struct timeval tv;
- if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0) {
+#ifdef CLOCK_MONOTONIC
+ struct timespec tp;
+ if (clock_gettime(CLOCK_MONOTONIC, &tp) == 0)
return (double) tp.tv_sec + (double) tp.tv_nsec / 1.0E9;
- } else {
- /* Fall back to using gettimeofday */
- struct timeval tv;
- struct timezone tz;
- gettimeofday(&tv, &tz);
- return (double)tv.tv_sec + (double)tv.tv_usec / 1.0E6;
- }
+#endif
+
+ /* Fall back to using gettimeofday */
+ gettimeofday(&tv, NULL);
+ return (double)tv.tv_sec + (double)tv.tv_usec / 1.0E6;
}
#endif