static void smartcard_device_state_free(SmartCardDeviceState* st) { if (st->scc) { st->scc->smartcard_state = NULL; } free(st->buf); spice_char_device_state_destroy(st->chardev_st); free(st); }
/* Must be called from RedClient handling thread. */ void spicevmc_device_disconnect(SpiceCharDeviceInstance *sin) { SpiceVmcState *state; state = (SpiceVmcState *)spice_char_device_state_opaque_get(sin->st); if (state->recv_from_client_buf) { spice_char_device_write_buffer_release(state->chardev_st, state->recv_from_client_buf); } spice_char_device_state_destroy(sin->st); state->chardev_st = NULL; reds_unregister_channel(&state->channel); free(state->pipe_item); red_channel_destroy(&state->channel); }