summaryrefslogtreecommitdiff
path: root/usr/src/uts/common/fs/zfs/unique.c
diff options
context:
space:
mode:
Diffstat (limited to 'usr/src/uts/common/fs/zfs/unique.c')
-rw-r--r--usr/src/uts/common/fs/zfs/unique.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/usr/src/uts/common/fs/zfs/unique.c b/usr/src/uts/common/fs/zfs/unique.c
index 90aa13817d..fbe7b619a2 100644
--- a/usr/src/uts/common/fs/zfs/unique.c
+++ b/usr/src/uts/common/fs/zfs/unique.c
@@ -19,7 +19,7 @@
* CDDL HEADER END
*/
/*
- * Copyright 2006 Sun Microsystems, Inc. All rights reserved.
+ * Copyright 2007 Sun Microsystems, Inc. All rights reserved.
* Use is subject to license terms.
*/
@@ -30,7 +30,7 @@
#include <sys/unique.h>
static avl_tree_t unique_avl;
-static kmutex_t unique_mtx; /* Lock never initialized. */
+static kmutex_t unique_mtx;
typedef struct unique {
avl_node_t un_link;
@@ -57,12 +57,22 @@ unique_init(void)
{
avl_create(&unique_avl, unique_compare,
sizeof (unique_t), offsetof(unique_t, un_link));
+ mutex_init(&unique_mtx, NULL, MUTEX_DEFAULT, NULL);
+}
+
+void
+unique_fini(void)
+{
+ avl_destroy(&unique_avl);
+ mutex_destroy(&unique_mtx);
}
uint64_t
unique_create(void)
{
- return (unique_insert(0));
+ uint64_t value = unique_insert(0);
+ unique_remove(value);
+ return (value);
}
uint64_t