From fa7cc280044533fd20468673bba9623787925f8e Mon Sep 17 00:00:00 2001 From: Theodore Ts'o Date: Mon, 3 Apr 2000 16:51:06 +0000 Subject: [PATCH] ChangeLog, gen_uuid.c: gen_uuid.c (get_clock): Fix bug where the last timeval wasn't getting set, causing potentially duplicate UUID's to be generated. --- lib/uuid/ChangeLog | 6 ++++++ lib/uuid/gen_uuid.c | 7 +++++-- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/lib/uuid/ChangeLog b/lib/uuid/ChangeLog index c3944aff..fd4acd88 100644 --- a/lib/uuid/ChangeLog +++ b/lib/uuid/ChangeLog @@ -1,3 +1,9 @@ +2000-04-03 Theodore Ts'o + + * gen_uuid.c (get_clock): Fix bug where the last timeval wasn't + getting set, causing potentially duplicate UUID's to be + generated. + 2000-03-12 Theodore Ts'o * gen_uuid.c (get_random_bytes): Make more paranoid about diff --git a/lib/uuid/gen_uuid.c b/lib/uuid/gen_uuid.c index eb25bed4..464cf018 100644 --- a/lib/uuid/gen_uuid.c +++ b/lib/uuid/gen_uuid.c @@ -183,14 +183,17 @@ try_again: (tv.tv_usec < last.tv_usec))) { clock_seq = (clock_seq+1) & 0x1FFF; adjustment = 0; + last = tv; } else if ((tv.tv_sec == last.tv_sec) && (tv.tv_usec == last.tv_usec)) { if (adjustment >= MAX_ADJUSTMENT) goto try_again; adjustment++; - } else + } else { adjustment = 0; - + last = tv; + } + clock_reg = tv.tv_usec*10 + adjustment; clock_reg += ((unsigned long long) tv.tv_sec)*10000000; clock_reg += (((unsigned long long) 0x01B21DD2) << 32) + 0x13814000; -- 2.11.0