So can be used by the device to communicate with the clients. Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> --- server/stream-device.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/server/stream-device.c b/server/stream-device.c index 963bb95..6b646fc 100644 --- a/server/stream-device.c +++ b/server/stream-device.c @@ -22,6 +22,8 @@ #include <spice/stream-device.h> #include "char-device.h" +#include "stream-channel.h" +#include "reds.h" #define STREAM_TYPE_DEVICE stream_device_get_type() @@ -41,9 +43,11 @@ typedef struct StreamDeviceClass StreamDeviceClass; struct StreamDevice { RedCharDevice parent; + StreamDevHeader hdr; uint8_t hdr_pos; bool has_error; + StreamChannel *channel; }; struct StreamDeviceClass { @@ -193,7 +197,10 @@ stream_device_connect(RedsState *reds, SpiceCharDeviceInstance *sin) { SpiceCharDeviceInterface *sif; + StreamChannel *channel = stream_channel_new(reds); + StreamDevice *dev = stream_device_new(sin, reds); + dev->channel = channel; sif = spice_char_device_get_interface(sin); if (sif->state) { @@ -206,6 +213,19 @@ stream_device_connect(RedsState *reds, SpiceCharDeviceInstance *sin) static void stream_device_dispose(GObject *object) { + StreamDevice *device = STREAM_DEVICE(object); + + if (device->channel) { + RedChannel *red_channel = RED_CHANNEL(device->channel); + RedsState *reds = red_channel_get_server(red_channel); + + // prevent future connection + reds_unregister_channel(reds, red_channel); + + // close all current connections and drop the reference + red_channel_destroy(red_channel); + device->channel = NULL; + } } static void -- 2.9.3 _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel