summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorTheodore Tso <tytso@mit.edu>1991-02-27 14:27:56 +0000
committerTheodore Tso <tytso@mit.edu>1991-02-27 14:27:56 +0000
commit37038d197a95a27f9dd7dd2cadcd272e129041cb (patch)
treefe07dd47c22333789ab06e530981506becb64193 /src
parent5565171b0593f03581d8ba9167b011dacb83c52d (diff)
downloadkrb5-37038d197a95a27f9dd7dd2cadcd272e129041cb.tar.gz
krb5-37038d197a95a27f9dd7dd2cadcd272e129041cb.tar.xz
krb5-37038d197a95a27f9dd7dd2cadcd272e129041cb.zip
Added a hack so that krb5_us_timeofday() will always return a monotonically
increasing time, bumping the microsecond time if necessary. This is needed on OS's like ultrix which only have a 10 us granularity in their clock, and don't guarantee in the kernel that two calls to gettimeofday will return different values. This guarantees it in user space, which isn't quite good enough (two different processes communicating over the loopback interface could get confused), but it's better than nothing. git-svn-id: svn://anonsvn.mit.edu/krb5/trunk@1811 dc483132-0cff-0310-8789-dd5450dbe970
Diffstat (limited to 'src')
-rw-r--r--src/lib/krb5/os/ustime.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/src/lib/krb5/os/ustime.c b/src/lib/krb5/os/ustime.c
index 974e942cc..65146492f 100644
--- a/src/lib/krb5/os/ustime.c
+++ b/src/lib/krb5/os/ustime.c
@@ -24,6 +24,8 @@ static char rcsid_mstime_c[] =
extern int errno;
+static struct timeval last_tv = {0, 0};
+
krb5_error_code
krb5_us_timeofday(seconds, microseconds)
register krb5_int32 *seconds, *microseconds;
@@ -34,6 +36,11 @@ register krb5_int32 *seconds, *microseconds;
/* failed, return errno */
return (krb5_error_code) errno;
}
+ if ((tv.tv_sec == last_tv.tv_sec) && (tv.tv_usec == last_tv.tv_usec))
+ tv.tv_usec = ++last_tv.tv_usec;
+ else
+ last_tv = tv;
+
*seconds = tv.tv_sec;
*microseconds = tv.tv_usec;
return 0;