Пример #1
0
static void
list_insert(uu_list_t *lp, uu_list_node_impl_t *np, uu_list_node_impl_t *prev,
            uu_list_node_impl_t *next)
{
    if (lp->ul_debug) {
        if (next->uln_prev != prev || prev->uln_next != next)
            uu_panic("insert(%p): internal error: %p and %p not "
                     "neighbors\n", (void *)lp, (void *)next,
                     (void *)prev);

        if (np->uln_next != POOL_TO_MARKER(lp->ul_pool) ||
                np->uln_prev != NULL) {
            uu_panic("insert(%p): elem %p node %p corrupt, "
                     "not initialized, or already in a list.\n",
                     (void *)lp, NODE_TO_ELEM(lp, np), (void *)np);
        }
        /*
         * invalidate outstanding uu_list_index_ts.
         */
        lp->ul_index = INDEX_NEXT(lp->ul_index);
    }
    np->uln_next = next;
    np->uln_prev = prev;
    next->uln_prev = np;
    prev->uln_next = np;

    lp->ul_numnodes++;
}
Пример #2
0
void
uu_avl_node_fini(void *base, uu_avl_node_t *np, uu_avl_pool_t *pp)
{
	uintptr_t *na = (uintptr_t *)np;

	if (pp->uap_debug) {
		if (na[0] == DEAD_MARKER && na[1] == DEAD_MARKER) {
			uu_panic("uu_avl_node_fini(%p, %p, %p (\"%s\")): "
			    "node already finied\n",
			    base, (void *)np, (void *)pp, pp->uap_name);
		}
		if (na[0] != POOL_TO_MARKER(pp) || na[1] != 0) {
			uu_panic("uu_avl_node_fini(%p, %p, %p (\"%s\")): "
			    "node corrupt, in tree, or in different pool\n",
			    base, (void *)np, (void *)pp, pp->uap_name);
		}
	}

	na[0] = DEAD_MARKER;
	na[1] = DEAD_MARKER;
	na[2] = DEAD_MARKER;
}
Пример #3
0
void
uu_list_node_fini(void *base, uu_list_node_t *np_arg, uu_list_pool_t *pp)
{
    uu_list_node_impl_t *np = (uu_list_node_impl_t *)np_arg;

    if (pp->ulp_debug) {
        if (np->uln_next == NULL &&
                np->uln_prev == NULL) {
            uu_panic("uu_list_node_fini(%p, %p, %p (\"%s\")): "
                     "node already finied\n",
                     base, (void *)np_arg, (void *)pp, pp->ulp_name);
        }
        if (np->uln_next != POOL_TO_MARKER(pp) ||
                np->uln_prev != NULL) {
            uu_panic("uu_list_node_fini(%p, %p, %p (\"%s\")): "
                     "node corrupt or on list\n",
                     base, (void *)np_arg, (void *)pp, pp->ulp_name);
        }
    }
    np->uln_next = NULL;
    np->uln_prev = NULL;
}
Пример #4
0
void
uu_list_node_init(void *base, uu_list_node_t *np_arg, uu_list_pool_t *pp)
{
    uu_list_node_impl_t *np = (uu_list_node_impl_t *)np_arg;

    if (pp->ulp_debug) {
        uintptr_t offset = (uintptr_t)np - (uintptr_t)base;
        if (offset + sizeof (*np) > pp->ulp_objsize) {
            uu_panic("uu_list_node_init(%p, %p, %p (\"%s\")): "
                     "offset %ld doesn't fit in object (size %ld)\n",
                     base, (void *)np, (void *)pp, pp->ulp_name,
                     (long)offset, (long)pp->ulp_objsize);
        }
        if (offset != pp->ulp_nodeoffset) {
            uu_panic("uu_list_node_init(%p, %p, %p (\"%s\")): "
                     "offset %ld doesn't match pool's offset (%ld)\n",
                     base, (void *)np, (void *)pp, pp->ulp_name,
                     (long)offset, (long)pp->ulp_objsize);
        }
    }
    np->uln_next = POOL_TO_MARKER(pp);
    np->uln_prev = NULL;
}
Пример #5
0
void
uu_avl_node_init(void *base, uu_avl_node_t *np, uu_avl_pool_t *pp)
{
	uintptr_t *na = (uintptr_t *)np;

	if (pp->uap_debug) {
		uintptr_t offset = (uintptr_t)np - (uintptr_t)base;
		if (offset + sizeof (*np) > pp->uap_objsize) {
			uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): "
			    "offset %ld doesn't fit in object (size %ld)\n",
			    base, (void *)np, (void *)pp, pp->uap_name,
			    (long)offset, (long)pp->uap_objsize);
		}
		if (offset != pp->uap_nodeoffset) {
			uu_panic("uu_avl_node_init(%p, %p, %p (\"%s\")): "
			    "offset %ld doesn't match pool's offset (%ld)\n",
			    base, (void *)np, (void *)pp, pp->uap_name,
			    (long)offset, (long)pp->uap_objsize);
		}
	}

	na[0] = POOL_TO_MARKER(pp);
	na[1] = 0;
}