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.
diff --git a/lib/uuid/ChangeLog b/lib/uuid/ChangeLog
index c3944af..fd4acd8 100644
--- a/lib/uuid/ChangeLog
+++ b/lib/uuid/ChangeLog
@@ -1,3 +1,9 @@
+2000-04-03 Theodore Ts'o <tytso@valinux.com>
+
+ * 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 <tytso@valinux.com>
* 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 eb25bed..464cf01 100644
--- a/lib/uuid/gen_uuid.c
+++ b/lib/uuid/gen_uuid.c
@@ -183,14 +183,17 @@
(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;