diff options
| author | Peter Pettersson <boretrk@hotmail.com> | 2021-07-15 21:00:02 +0200 |
|---|---|---|
| committer | Peter Pettersson <boretrk@hotmail.com> | 2021-07-15 21:00:02 +0200 |
| commit | e4e173e8744dbdf9bed4b814f1af6a8080c4c603 (patch) | |
| tree | ea41de624aae1e2289813c442bd7cc6508174ebf /src | |
| parent | f15a6792d382f7a9bf6d5c638417f2b436a144a9 (diff) | |
| download | libgit2-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.c | 4 | ||||
| -rw-r--r-- | src/transports/smart_protocol.c | 3 | ||||
| -rw-r--r-- | src/util.h | 18 |
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 |
