This is merely a historical archive of years 2008-2021, before the migration to mailman3.
A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.
Max gerrit-no-reply at lists.osmocom.orgReview at https://gerrit.osmocom.org/5104 NS: use monotonic clock Use monotonic clock to compute elapsed time to make sure it's not affected by system clock changes. Change-Id: Ib6949601a80747f0de1a05e0790a1bace209efbf Related: OS#2586 --- M TODO-RELEASE M include/osmocom/gprs/gprs_ns.h M src/gb/gprs_ns.c 3 files changed, 10 insertions(+), 13 deletions(-) git pull ssh://gerrit.osmocom.org:29418/libosmocore refs/changes/04/5104/1 diff --git a/TODO-RELEASE b/TODO-RELEASE index 5861956..804c2dd 100644 --- a/TODO-RELEASE +++ b/TODO-RELEASE @@ -9,3 +9,4 @@ #library what description / commit summary line core msgb_queue_free() add inline func to msgb.h core osmo_time_elapsed() add function to estimate elapsed time +gb struct gprs_nsvc add t_start parameter diff --git a/include/osmocom/gprs/gprs_ns.h b/include/osmocom/gprs/gprs_ns.h index b368ad9..a303732 100644 --- a/include/osmocom/gprs/gprs_ns.h +++ b/include/osmocom/gprs/gprs_ns.h @@ -127,7 +127,8 @@ struct osmo_timer_list timer; enum nsvc_timer_mode timer_mode; - struct timeval timer_started; + struct timeval timer_started; /* deprecated! will be replaced by t_start eventually */ + struct timespec t_start; int alive_retries; unsigned int remote_end_is_sgsn:1; diff --git a/src/gb/gprs_ns.c b/src/gb/gprs_ns.c index 47d170d..5a0aae3 100644 --- a/src/gb/gprs_ns.c +++ b/src/gb/gprs_ns.c @@ -66,7 +66,7 @@ #include <unistd.h> #include <errno.h> #include <stdint.h> - +#include <time.h> #include <sys/types.h> #include <sys/socket.h> #include <arpa/inet.h> @@ -612,18 +612,13 @@ if (osmo_timer_pending(&nsvc->timer)) osmo_timer_del(&nsvc->timer); - osmo_gettimeofday(&nsvc->timer_started, NULL); + if (clock_gettime(CLOCK_MONOTONIC, &nsvc->t_start) != 0) { + LOGP(DNS, LOGL_ERROR, "NSEI=%u failed to start timer in mode %s (%u seconds): %s\n", + nsvc->nsei, get_value_string(timer_mode_strs, mode), seconds, strerror(errno)); + } + nsvc->timer_mode = mode; osmo_timer_schedule(&nsvc->timer, seconds, 0); -} - -static int nsvc_timer_elapsed_ms(struct gprs_nsvc *nsvc) -{ - struct timeval now, elapsed; - osmo_gettimeofday(&now, NULL); - timersub(&now, &nsvc->timer_started, &elapsed); - - return 1000 * elapsed.tv_sec + elapsed.tv_usec / 1000; } static void gprs_ns_timer_cb(void *data) @@ -1387,7 +1382,7 @@ case NS_PDUT_ALIVE_ACK: if ((*nsvc)->timer_mode == NSVC_TIMER_TNS_ALIVE) osmo_stat_item_set((*nsvc)->statg->items[NS_STAT_ALIVE_DELAY], - nsvc_timer_elapsed_ms(*nsvc)); + osmo_time_elapsed(&(*nsvc)->t_start, T_MILLIS)); /* stop Tns-alive and start Tns-test */ nsvc_start_timer(*nsvc, NSVC_TIMER_TNS_TEST); if ((*nsvc)->remote_end_is_sgsn) { -- To view, visit https://gerrit.osmocom.org/5104 To unsubscribe, visit https://gerrit.osmocom.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ib6949601a80747f0de1a05e0790a1bace209efbf Gerrit-PatchSet: 1 Gerrit-Project: libosmocore Gerrit-Branch: master Gerrit-Owner: Max <msuraev at sysmocom.de>