Spice needs some time at the end of migration to transfer internal state to destination. However, it needs helping hand from libvirt.
With previous code it was possible to kill source qemu (and spice server) before internal state was transmitted. This lead into unresponsive client on destination side.
After qemu reports migration has finished, libvirt waits for spice server to migrate. Libvirt checks repeatedly on the monitor until the spice server reports success. Qemu is not terminated meanwhile.
Spice client won't get unresponsive anymore.