111 }
112
113 void
114 uu_avl_pool_destroy(uu_avl_pool_t *pp)
115 {
116 if (pp->uap_debug) {
117 if (pp->uap_null_avl.ua_next_enc !=
118 UU_PTR_ENCODE(&pp->uap_null_avl) ||
119 pp->uap_null_avl.ua_prev_enc !=
120 UU_PTR_ENCODE(&pp->uap_null_avl)) {
121 uu_panic("uu_avl_pool_destroy: Pool \"%.*s\" (%p) has "
122 "outstanding avls, or is corrupt.\n",
123 (int)sizeof (pp->uap_name), pp->uap_name,
124 (void *)pp);
125 }
126 }
127 (void) pthread_mutex_lock(&uu_apool_list_lock);
128 pp->uap_next->uap_prev = pp->uap_prev;
129 pp->uap_prev->uap_next = pp->uap_next;
130 (void) pthread_mutex_unlock(&uu_apool_list_lock);
131 pp->uap_prev = NULL;
132 pp->uap_next = NULL;
133 uu_free(pp);
134 }
135
136 void
137 uu_avl_node_init(void *base, uu_avl_node_t *np, uu_avl_pool_t *pp)
138 {
139 uintptr_t *na = (uintptr_t *)np;
140
141 if (pp->uap_debug) {
142 uintptr_t offset = (uintptr_t)np - (uintptr_t)base;
143 if (offset + sizeof (*np) > pp->uap_objsize) {
144 uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): "
145 "offset %ld doesn't fit in object (size %ld)\n",
146 base, (void *)np, (void *)pp, pp->uap_name,
147 (long)offset, (long)pp->uap_objsize);
148 }
149 if (offset != pp->uap_nodeoffset) {
150 uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): "
|
111 }
112
113 void
114 uu_avl_pool_destroy(uu_avl_pool_t *pp)
115 {
116 if (pp->uap_debug) {
117 if (pp->uap_null_avl.ua_next_enc !=
118 UU_PTR_ENCODE(&pp->uap_null_avl) ||
119 pp->uap_null_avl.ua_prev_enc !=
120 UU_PTR_ENCODE(&pp->uap_null_avl)) {
121 uu_panic("uu_avl_pool_destroy: Pool \"%.*s\" (%p) has "
122 "outstanding avls, or is corrupt.\n",
123 (int)sizeof (pp->uap_name), pp->uap_name,
124 (void *)pp);
125 }
126 }
127 (void) pthread_mutex_lock(&uu_apool_list_lock);
128 pp->uap_next->uap_prev = pp->uap_prev;
129 pp->uap_prev->uap_next = pp->uap_next;
130 (void) pthread_mutex_unlock(&uu_apool_list_lock);
131 (void) pthread_mutex_destroy(&pp->uap_lock);
132 pp->uap_prev = NULL;
133 pp->uap_next = NULL;
134 uu_free(pp);
135 }
136
137 void
138 uu_avl_node_init(void *base, uu_avl_node_t *np, uu_avl_pool_t *pp)
139 {
140 uintptr_t *na = (uintptr_t *)np;
141
142 if (pp->uap_debug) {
143 uintptr_t offset = (uintptr_t)np - (uintptr_t)base;
144 if (offset + sizeof (*np) > pp->uap_objsize) {
145 uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): "
146 "offset %ld doesn't fit in object (size %ld)\n",
147 base, (void *)np, (void *)pp, pp->uap_name,
148 (long)offset, (long)pp->uap_objsize);
149 }
150 if (offset != pp->uap_nodeoffset) {
151 uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): "
|