[Olsr-dev] RFC: fix gettimeofday moves time backwards
Ferry Huberts
(spam-protected)
Wed Jun 27 09:52:14 CEST 2012
Guys,
The gettimeofday() call does not guarantee that time moves forward (at
least on Linux) and it seems to me that our code depends on that.
The following sites use gettimeofday():
> ./lib/secure/src/olsrd_secure.c:1089: gettimeofday(&now, NULL);
> ./lib/pud/nmealib/src/time.c:31: gettimeofday(&tp, NULL);
> ./lib/httpinfo/src/olsrd_httpinfo.c:315: gettimeofday(&start_time, NULL);
> ./lib/httpinfo/src/olsrd_httpinfo.c:833: gettimeofday(&now, NULL);
> ./lib/tas/src/os_unix.c:133: gettimeofday(&timeVal, NULL);
> ./lib/jsoninfo/src/olsrd_jsoninfo.c:326: gettimeofday(&start_time, NULL);
> ./src/scheduler.c:92: if (gettimeofday(&tv, NULL) != 0) {
> ./src/scheduler.c:545: if (gettimeofday(&first_tv, NULL)) {
> ./src/scheduler.c:729: gettimeofday(&now, NULL);
> ./src/olsr_spf.c:338: gettimeofday(&t1, NULL);
> ./src/olsr_spf.c:433: gettimeofday(&t2, NULL);
> ./src/olsr_spf.c:444: gettimeofday(&t3, NULL);
> ./src/olsr_spf.c:506: gettimeofday(&t4, NULL);
> ./src/olsr_spf.c:514: gettimeofday(&t5, NULL);
> ./src/win32/compat.c:113:gettimeofday(struct timeval *TVal, void *TZone __attribute__ ((unused)))
> ./src/win32/sys/time.h:96:int gettimeofday(struct timeval *TVal, void *TZone);
> ./CHANGELOG:847:function instead of gettimeofday(2). This prevents possible problems
> ./gui/linux-gtk/src/nodes.c:97: gettimeofday(&now, (struct timezone *)NULL);
> ./gui/linux-gtk/src/nodes.c:107: gettimeofday(&now, (struct timezone *)NULL);
> ./gui/linux-gtk/src/nodes.c:145: gettimeofday(&now, (struct timezone *)NULL);
> ./gui/linux-gtk/src/nodes.c:189: gettimeofday(&now, (struct timezone *)NULL);
> ./gui/linux-gtk/src/nodes.c:369: gettimeofday(&now, (struct timezone *)NULL);
> ./gui/linux-gtk/src/nodes.c:526: gettimeofday(&now, (struct timezone *)NULL);
> ./gui/linux-gtk/src/nodes.c:561: gettimeofday(&now, (struct timezone *)NULL);
I propose to adjust these calls to use the
clock_gettime(CLOCK_MONOTONIC, ...) call.
I know this call is available on Linux but don't know about the other
platforms. I can try win32 and Android myself but have no way to check
bsd variants.
What do you think?
--
Ferry Huberts
More information about the Olsr-dev
mailing list