Example #1
0
/**
 * Close the node and free memory.
 *
 * @param node
 */
void aura_close(struct aura_node *node)
{
    struct aura_eventloop *loop = aura_eventloop_get_data(node);

    if (node->tr->close)
        node->tr->close(node);

    if (loop) {
        if (loop->autocreated)
            aura_eventloop_destroy(loop);
        else
            aura_eventloop_del(node);
    }

    /* After transport shutdown we need to clean up
       remaining buffers */
    cleanup_buffer_queue(&node->inbound_buffers);
    cleanup_buffer_queue(&node->outbound_buffers);
    aura_transport_release(node->tr);
    /* Check if we have an export table registered and nuke it */
    if (node->tbl)
        aura_etable_destroy(node->tbl);

    /* Free file descriptors */
    if (node->fds)
        free(node->fds);

    free(node);
    slog(6, SLOG_LIVE, "Transport closed");
}
Example #2
0
static void susb_close(struct aura_node *node)
{
	struct usb_dev_info *inf = aura_get_transportdata(node);

	slog(3, SLOG_INFO, "Closing susb transport");

	while (inf->cbusy)
		libusb_handle_events(inf->ctx);

	if (inf->dev_descr.vendor)
		free(inf->dev_descr.vendor);
	if (inf->dev_descr.product)
		free(inf->dev_descr.product);
	if (inf->dev_descr.serial)
		free(inf->dev_descr.serial);

	libusb_free_transfer(inf->ctransfer);

	if (inf->handle)
		libusb_close(inf->handle);

	/* If we've created etable but have NOT yet activated it
	 *	we have to take care and free it ourselves
	 */
	if (inf->etbl && node->tbl != inf->etbl)
		aura_etable_destroy(inf->etbl);

	libusb_exit(inf->ctx);
	free(inf);
}