Go to file
Christophe Fergeau 657a1d92e8 dcc: Fix seamless migration
Since commit ef4b1bdb "red-channel-client: Prevent too tight loop
waiting for ACKs", after seamless migration, the display is no longer
updated on the client-side, even though the VM is functional (responds
to keyboard input, reconnecting the client restores the display
functionality, ...).

This is mainly caused because after migration,
red_channel_client_waiting_for_ack() will be true until
red_channel_client_ack_zero_messages_window() is called.

What happens is the following:
The dcc is created, and dcc_start() pushes a RED_PIPE_ITEM_TYPE_SET_ACK
message.
This calls prepare_pipe_add(), which will enable write event on the dcc
watch. red_channel_client_event() will be called, which will trigger a
red_channel_client_push(). Since red_channel_client_waiting_for_ack()
returns true, we won't get any item to push, and (because of commit
ef4b1bdb), we will disable write notifications on the watch.
At this point, rcc->priv->pipe is no longer empty, so prepare_pipe_add()
is not going to reenable the write notifications.

Then red_channel_client_ack_zero_messages_window() is finally called as
part of dcc_handle_migrate_data(), so from this point on,
red_channel_client_waiting_for_ack() is no longer true.

However, nothing ever reenables WRITE events, nor empties
rcc->priv->pipe, so nothing ever gets pushed, causing no display updates
at all after a migration, even if the VM is functional (input, ...)
apart from that.

This commit reenables WRITE events in
red_channel_client_ack_zero_messages_window() if we were waiting for
ack.

Signed-off-by: Christophe Fergeau <cfergeau@redhat.com>
2017-10-10 12:35:59 +02:00
build-aux Update git-version-gen to latest version 2013-12-11 16:32:36 +01:00
docs Mention vmport in user manual 2017-10-04 11:09:15 -05:00
m4 build-sys: Do not abort on warnings 2017-04-22 08:44:21 +01:00
server dcc: Fix seamless migration 2017-10-10 12:35:59 +02:00
spice-common@70d4739ce2 build: Update spice-common submodule 2017-09-25 15:08:48 +02:00
tests tests/migrate.py: add --vdagent 2011-08-23 17:01:14 +03:00
tools reds_stat: Show single spice file if only one is present 2017-09-14 16:36:14 +01:00
uncrustify_cfg fresh start 2009-10-14 15:06:41 +02:00
.gitignore docs: Add some documentation on spice threading model 2017-09-11 18:03:57 +01:00
.gitlab-ci.yml ci: Fix build on gitlab 2017-09-01 10:55:34 +01:00
.gitmodules Use the spice-common submodule 2012-03-25 18:59:10 +02:00
.mailmap syntax-check: Fix missing AUTHORS 2016-12-05 13:48:28 +00:00
.travis.yml Add travis CI file 2015-11-27 20:21:24 +01:00
AUTHORS syntax-check: Fix missing AUTHORS 2017-03-06 14:26:13 +00:00
autogen.sh build-sys: Pass --enable-python-checks when running autogen.sh 2015-04-23 10:38:24 +02:00
cfg.mk build-sys: Add make check-valgrind target 2017-03-21 16:34:56 +01:00
ChangeLog fresh start 2009-10-14 15:06:41 +02:00
configure.ac build: Prepare for 0.13.91 release 2017-09-25 15:08:35 +02:00
COPYING Relicense everything from GPL to LGPL 2.1+ 2010-04-13 22:22:15 +02:00
GNUmakefile syntax-check: Update gnufiles 2016-11-18 12:06:53 +00:00
maint.mk syntax-check: Update gnufiles 2016-11-18 12:06:53 +00:00
Makefile.am build-sys: Add make check-valgrind target 2017-03-21 16:34:56 +01:00
NEWS build: Prepare for 0.13.91 release 2017-09-25 15:08:35 +02:00
README README: Add missing optional dependencies 2017-07-28 10:33:57 +01:00
spice-server.pc.in build-sys: Require a new enough spice-protocol in .pc file 2015-08-26 11:01:09 +02:00
TODO.multiclient Remove trailing whitespace from end of lines 2012-01-13 18:11:59 +02:00

   SPICE: Simple Protocol for Independent Computing Environments
   =============================================================

SPICE is a remote display system built for virtual environments which
allows you to view a computing 'desktop' environment not only on the
machine where it is running, but from anywhere on the Internet and
from a wide variety of machine architectures.

Installation
------------

The SPICE package uses GNU autotools, so the build install process
follows the standard process documented in the INSTALL file. As a
quick start you can do

  ./configure --prefix=/usr --sysconfdir=/etc \
        --localstatedir=/var --libdir=/usr/lib
  make
  sudo make install

Or to install into a private user specific location

  ./configure --prefix=$HOME/spice
  make
  make install

The following mandatory dependencies are required in order to
build SPICE

    Spice protocol >= 0.12.13
    Pixman         >= 0.17.7
    OpenSSL
    libjpeg
    zlib

The following optional dependencies increase the available
functionality

    Cyrus-SASL
    libcacard      >= 0.1.2             (Smartcard support)
    Opus           >= 1.0.0             (Opus audio encoding support)
    LZ4                                 (LZ4 compression support)
    GStreamer      >= 1.0.0

Communication
-------------

To communicate with the development team, or to post patches
there is a technical mailing list:

   http://lists.freedesktop.org/mailman/listinfo/spice-devel

There is also a mailing list for new release announcements:

   http://lists.freedesktop.org/archives/spice-announce/

To view known bugs, or report new bugs, in SPICE visit

   https://bugs.freedesktop.org/describecomponents.cgi?product=Spice

Bugs found when using an OS distribution's binary packages should
be reported to the OS vendors' own bug tracker first.

The latest SPICE code can be found in GIT at:

   https://cgit.freedesktop.org/spice/

Licensing
---------

SPICE is provided under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.

Please see the COPYING file for the complete LGPLv2+ license
terms, or visit <http://www.gnu.org/licenses/>.

Experimental Features
---------------------
To enable multiple client connections, set:
SPICE_DEBUG_ALLOW_MC=1

-- End of readme