Example #1
0
int b1_handle_acquire(B1Handle **handlep, B1Peer *peer, uint64_t handle_id) {
        B1Handle *handle;
        CRBNode **slot, *p;
        int r;

        assert(handlep);
        assert(peer);

        if (handle_id == BUS1_HANDLE_INVALID) {
                *handlep = NULL;
                return 0;
        }

        slot = c_rbtree_find_slot(&peer->handles, handles_compare, &handle_id, &p);
        if (slot) {
                r = b1_handle_new(peer, handle_id, &handle);
                if (r < 0)
                        return r;

                c_rbtree_add(&peer->handles, p, slot, &handle->rb);
        } else {
                handle = c_container_of(p, B1Handle, rb);
                b1_handle_ref(handle);
                b1_handle_release(handle);
        }

        *handlep = handle;

        return 0;
}
Example #2
0
static void test_node(void) {
        _c_cleanup_(b1_peer_unrefp) B1Peer *peer = NULL;
        _c_cleanup_(b1_node_freep) B1Node *node = NULL;
        B1Handle *handle;
        int r;

        r = b1_peer_new(&peer);
        assert(r >= 0);

        r = b1_node_new(peer, &node);
        assert(r >= 0);
        assert(node);

        assert(b1_node_get_peer(node) == peer);

        handle = b1_node_get_handle(node);
        assert(handle);

        handle = b1_handle_ref(handle);
        assert(handle);
        b1_handle_unref(handle);
}