static void b1_peer_free(CRef *ref, void *userdata) { B1Peer *peer = userdata; assert(!c_rbtree_first(&peer->handles)); assert(!c_rbtree_first(&peer->nodes)); bus1_peer_free(peer->peer); free(peer); }
static int bus1_fop_release(struct inode *inode, struct file *file) { struct bus1_peer *peer = file->private_data; bus1_peer_disconnect(peer); bus1_peer_free(peer); return 0; }
static int bus1_fop_open(struct inode *inode, struct file *file) { struct bus1_peer *peer; int r; peer = bus1_peer_new(); if (IS_ERR(peer)) return PTR_ERR(peer); r = bus1_peer_connect(peer); if (r < 0) { bus1_peer_free(peer); return r; } file->private_data = peer; return 0; }