On (Sun) 23 Dec 2012 [23:35:29], Alon Levy wrote: > The target has not seen the guest_connected event via > spice_chr_guest_open or spice_chr_write, and so spice server wrongly > assumes there is no agent active, while the client continues to send > motion events only by the agent channel, which the server ignores. The > net effect is that the mouse is static in the guest. > > By registering the interface on post load spice server will pass on the > agent messages fixing the mouse behavior after migration. > > RHBZ #725965 > > Signed-off-by: Alon Levy <al...@redhat.com> > --- > spice-qemu-char.c | 42 ++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 42 insertions(+)
I suppose Gerd should pick this up in his tree? I have a couple of questions below, but I ack this approach. > static QLIST_HEAD(, SpiceCharDriver) spice_chars = > @@ -185,18 +190,23 @@ static void spice_chr_close(struct CharDriverState *chr) > printf("%s\n", __func__); > vmc_unregister_interface(s); > QLIST_REMOVE(s, next); > + qemu_free_timer(s->post_load.timer); Also vmstate_unregister()? I'm wondering if there can be a case where this function is called before the timer has had a chance to fire. It can happen if the spice port is hot-unplugged before the guest has had a chance to run on the target. In that case, qemu_del_timer() should be called as well, to ensure the timer doesn't fire with invalid args later. Amit