Acked-by: Jonathon Jongsma <jjongsma@xxxxxxxxxx> On Fri, 2017-08-25 at 10:54 +0100, Frediano Ziglio wrote: > Currently, red_char_device_reset() stops the device, clears all > pending > messages, and clears its device instance. After this function is > called, > the char device will not work again until it is assigned a new device > instance and restarted. This is fine for the vdagent char device, > which > is currently the only user of this function. But for the stream > device, > we want to be able to reset the char device to a working state (e.g. > clear all pending messages, etc) without stopping or disabling the > char > device. So this function will now only reset the char device to a > clean > working state, and the _stop() and _reset_dev_instance() calls will > be > moved up to the caller. > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > --- > server/char-device.c | 2 -- > server/reds.c | 6 +++++- > 2 files changed, 5 insertions(+), 3 deletions(-) > > diff --git a/server/char-device.c b/server/char-device.c > index 658f9f36..f8a098bd 100644 > --- a/server/char-device.c > +++ b/server/char-device.c > @@ -823,7 +823,6 @@ void red_char_device_reset(RedCharDevice *dev) > GList *client_item; > RedCharDeviceWriteBuffer *buf; > > - red_char_device_stop(dev); > dev->priv->wait_for_migrate_data = FALSE; > spice_debug("char device %p", dev); > while ((buf = g_queue_pop_tail(&dev->priv->write_queue))) { > @@ -845,7 +844,6 @@ void red_char_device_reset(RedCharDevice *dev) > dev_client->num_client_tokens += dev_client- > >num_client_tokens_free; > dev_client->num_client_tokens_free = 0; > } > - red_char_device_reset_dev_instance(dev, NULL); > } > > void red_char_device_wakeup(RedCharDevice *dev) > diff --git a/server/reds.c b/server/reds.c > index d895b3b4..425cd847 100644 > --- a/server/reds.c > +++ b/server/reds.c > @@ -472,6 +472,7 @@ static void reds_reset_vdp(RedsState *reds) > { > RedCharDeviceVDIPort *dev = reds->agent_dev; > SpiceCharDeviceInterface *sif; > + RedCharDevice *char_dev; > > dev->priv->read_state = VDI_PORT_READ_STATE_READ_HEADER; > dev->priv->receive_pos = (uint8_t *)&dev->priv- > >vdi_chunk_header; > @@ -504,7 +505,10 @@ static void reds_reset_vdp(RedsState *reds) > * The tokens are also reset to avoid mismatch in upon agent > reconnection. > */ > dev->priv->agent_attached = FALSE; > - red_char_device_reset(RED_CHAR_DEVICE(dev)); > + char_dev = RED_CHAR_DEVICE(dev); > + red_char_device_stop(char_dev); > + red_char_device_reset(char_dev); > + red_char_device_reset_dev_instance(char_dev, NULL); > > sif = spice_char_device_get_interface(reds->vdagent); > if (sif->state) { _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel