[Spice-commits] Changes to 'mc.v8'

Alon Levy alon at kemper.freedesktop.org
Sun Aug 14 05:56:46 PDT 2011

New branch 'mc.v8' available with the following commits:
commit 87a80cbfee617b76e821f37febdcbc16e1ca60dc
Author: Alon Levy <alevy at redhat.com>
Date:   Fri Aug 12 21:50:42 2011 +0300

    server/main_channel: reduce verbose agent data command
    by using the new SPICE_DEBUG_LEVEL.

commit 7679bc6827b0d4fc41f2fdfdeb74795dca597596
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Thu Aug 4 16:39:09 2011 +0300

    drawables count for debug

commit 71e8013377fc286cbc2103d62e0cfcf3d6f61f67
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Wed Aug 3 19:02:45 2011 +0300

    server/red_channel.c: cleanups

commit 7a6315b7608b3e4516b917a70d0e276aaef9e0fe
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Wed Aug 3 18:36:04 2011 +0300

    server: registering RedChannel in reds, instead of Channel
    Merging the functionality of reds::channel, into RedChannel.
    In addition, cleanup and fix disconnection code: before this patch,
    could have been called from the red_worker thread
    (and it must be called only from the io thread).
    RedChannel holds only connected channel clients. RedClient holds all the
    channel clients that were created till it is destroyed
    (and then it destroys them as well).
    Note: snd_channel still doesn't use red_channel, however it
    creates dummy channel and channel clients, in order to register itself
    in reds.
    server/red_channel.c: a channel is connected if it holds at least one channel client
    Previously I changed RedChannel to hold only connected channel clients and
    RedClient, to hold all the channel clients as long as it is not destroyed.

commit b1f35d339a4c889dbacefa3fc49ec12cb64e3850
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Wed Aug 3 16:04:20 2011 +0300

    server/red_channel.c inroducing client_cbs
    client_cbs are supposed to be called from client context (reds). This patch will be used
    in future patches for relacing reds::Channel with RedChannel in order to eliminate redundancy.

commit 9ebc044a97de1254a61d06577ba53a0fc5802d25
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Wed Aug 3 15:43:02 2011 +0300

    server/red_channel.c: pack all channel callbacks to ChannelCbs

commit 3c12c6501d2ef287469191b3311936559169539a
Author: Alon Levy <alevy at redhat.com>
Date:   Thu Apr 21 22:21:36 2011 +0300

    server/red_worker: add ref counting to RedDrawable
    introduces ref_red_drawable and put_red_drawable (rename from free_red_drawable)
    RedDrawable is already references by Drawable and RedGlzDrawable, with
    a hack to NULL the drawable field in RedGlzDrawable to indicate RedGlzDrawable
    is the last reference holder. Using an explicit reference count instead.

commit 8fa0ed33e28be4d0934f01a8cc876eee66341d4f
Author: Alon Levy <alevy at redhat.com>
Date:   Wed Jun 15 14:48:46 2011 +0200

    server/red_worker: add stream_count (for debug purposes)

commit b43a8749c1ad23a19e82c6092c8df23e1a38c8b4
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Jun 5 11:49:48 2011 +0300

    server/red_worker: validate_surface: print paniced surface_id

commit 705b2237ec694ac26b3fe4b66c945706ea4cdd31
Author: Alon Levy <alevy at redhat.com>
Date:   Wed Jun 22 13:43:13 2011 +0200

    server/red_worker: no panic on double destroy primary

commit b757ee2cf4c01cfc0272ef1d3418e972e55a69f9
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 24 13:42:03 2011 +0300

    server/red_worker: DEBUG_CURSORS
    Add cursor allocation debugging code that is turned off as long as
    DEBUG_CURSORS is not defined.

commit acc9ce1f665d0b874f230c676ff1a3feb536e36f
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Sun Apr 24 12:03:28 2011 +0300

    spice/red_worker.c: make dictionary and cache different per client
    There is no inter-client shared dictionary and cache yet.
    At this point the display channel can be used by multiple clients.
    You can still crash on lack of Drawables or CursorItems due to the slower
    clients pipe growing uncontrollably.

commit 451f108fc61100d3aae5467a15323dfa9431e852
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 24 12:00:43 2011 +0300

    server/red_worker: on_new_display_channel_client: push ack, cleanup
    small cleanup patch, only functional change is sending a set ack message.

commit 317c15ff7a74564e041cc717e22bc8ab8316b6ac
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 24 09:44:21 2011 +0300

    server/red_worker: add cursor_channel_client_disconnect
    single client.

commit 9468ffecd6fbfacf6bc2931106e3d1be46e397f5
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 24 09:43:35 2011 +0300

    server/red_worker: remove forced disconnect on connect

commit 93c807dd887351cf43b35a324be0b19345def533
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Tue Aug 2 11:01:16 2011 +0300

    server/red_worker.c: fix CursorPipeItem leak
    CursorPipeItems and their corresponding cursor_item were not
    freed when they were removed from the pipe without sending them.
    In addition cursor_channel_hold_pipe_item used wrong conversion
    to (CursorItem*) for a (CursorPipeItem*).

commit 0d41b6c1f4a59d1098a84f26b8820803b4d0e80f
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 24 13:39:41 2011 +0300

    server/red_worker: split cursor pipe item from cursor item
    Required to support multiple clients.
    Also changes somewhat the way we produce PIPE_ITEM_TYPE_LOCAL_CURSOR. Btw,
    I haven't managed to see when we actually produce such an item during my
    Previously we had a single pipe item per CursorItem, this is impossible
    with two pipes, which happens when we have two clients.

commit cd1d15b2f9ffecf72071972620db4b9263d608ee
Author: Alon Levy <alevy at redhat.com>
Date:   Fri Apr 22 23:04:27 2011 +0300

    server/red_worker: whitespace fixes

commit aba4310dd88a456fdc07c0dc9ffcbd053c6b79cc
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 24 10:31:41 2011 +0300

    server/reds: add RedsState.allow_multiple_clients
    Currently set by environment variable SPICE_DEBUG_ALLOW_MC (any value means
    to allow multiple connections). Later will be set by spice api from qemu.

commit 80321ece370851f3a3ef34db0e7ed812ff911695
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Tue Aug 2 09:46:46 2011 +0300

    server/red_worker.c: fix DrawablePipeItem leak
    DrawablePipeItems were not freed when they were removed from the
    pipe without sending them
    TODO: squash

commit b7a83c3024b1dcc42b9ae29ff5361ac975736003
Author: Alon Levy <alevy at redhat.com>
Date:   Wed Apr 13 09:24:31 2011 +0300

    server/red_channel: introduce client ring in RedChannel (+Drawable pipes and glz rings - split)
    TODO resplit red_worker stuff:
     things missing / not done right in red_worker:
      * StreamAgents are in DCC - right/wrong?
      * GlzDict is multiplied - multiple compressions.
    main_channel and red_worker had several locations that still accessed rcc
    directly, so they had to be touched too, but the changes are minimal.
    Most changes are in red_channel: drop the single client reference in RedChannel
    and add a ring of channels.
    We still are missing:
     * remove the disconnect calls on new connections

commit 1f85d6a49f666bd40c3124e3650b2f731aa5c926
Author: Alon Levy <alevy at redhat.com>
Date:   Wed Apr 13 08:52:44 2011 +0300

    server/red_channel: add pipe_size helpers

commit 9e258bda64f76a84ba596939aea9524abfb35da2
Author: Alon Levy <alevy at redhat.com>
Date:   Wed Apr 13 00:35:20 2011 +0300

    server/red_worker: remove more direct access to RedChannelClient.rcc

commit 31c70bb539e0c6a936f2f4ac98f9f8efe51895d1
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Thu Jul 14 08:58:39 2011 +0300

    server/red_worker.c moved free_compressed_buf from dcc to dc (common pool to all clients). TODO: squash

commit ec77f4f239aad3def1a0cd0a0d5f09748d7e7835
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Tue Aug 2 11:57:19 2011 +0300

    server/red_worker.c: fix not setting cursor_channel_client.common.worker
    TODO: squash

commit 1904a52bc1ceccc2f4a9d20dc64a6ae9d602a3e9
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Jul 3 18:56:33 2011 +0200

    server/red_worker: multiple client support (temp - not working)
    Temp because this is in the middle of using a single surfaces and current tree
    for all pipes. This means that each Drawable,StreamAgent needs to reference multiple pipes.
    Original commit message before rebasing
    Split both display and cursor channels to a client part and channel part.
    Introduce DisplayChannelClient, CursorChannelClient, CommonChannelClient.
    don't disconnect channel on client disconnect.
    Move all caches to the ChannelClient's.
    Remove reference counting of the channel - need to split this to a separate
    patch. The rationalization for this:
    /* TODO: Why do we reference count the listener?
     * really - what's the lifecycle of a listener? isn't it from peer connection
     * until removal? the drawable's etc. have a valid lifetime outside of this, but
     * isn't the listener's lifetime exactly this?
     * This was meant to allow deletion of the display_channel itself - but now
     * we don't actually ever delete that.
     * */
    No new functionality introduced.
    TODO: fix crash:
    Still have the possibility of crashing if too many disconnections happen at
    once. Noticed that this happens if we call disconnect with two different channel
    clients pointing to the same channel. should make sure the channel destruction
    happens from a single thread? should only happen from main thread. check
    by printing pthread_self.

commit de06159eab9e6adb46c45cdcab9ecb514f3b5ba0
Author: Alon Levy <alevy at redhat.com>
Date:   Thu May 5 12:49:35 2011 +0300

    server/red_worker: cleanup

commit 2948e11d6a89705ec6155fb3d3634ce8e970449c
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Apr 11 23:58:52 2011 +0300

    server/smartcard: support multiple clients
    each client supplying a smartcard channel gets it's own smartcard. If
    there are not enough smartcards provided by the server (read: qemu)
    then it will be as though there are none.
    currently disabled - later patches that enable smartcard don't make
    this channel available to any but the first client.

commit dcd1eabadb34c584a08b6dc8980960effb424a29
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Apr 11 23:51:14 2011 +0300

    server/red_tunnel_worker: trivial multi client support
    That's about it.  this is probably the wrong way to do it. Not tested
    at all. What do we want, a separate interface per client? same interface
    for all clients? probably the later. This doesn't do that. Not tested,
    so probably doesn't even work.
    changes red_channel_pipe_item_is_linked to red_channel_client_pipe_item_is_linked,
    since tunnel channel is the only user, must be done in patch to not break compilation.

commit f2486b6bf47ee05f630cf6ec8094586025d5cd6e
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Apr 11 22:51:54 2011 +0300

    server/inputs_channel: support multiple clients
    from server events are broadcast - leds change. The rest is client
    to server, so it is just passed on.

commit 40865e43cd250a657e78fd1b5a6905a321fad8a4
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Apr 11 22:29:58 2011 +0300

    server/main_channel: support multiple clients
    The main channel deals with connecting new clients, announcing mouse mode
    changes, and the agent channel. The implementation is currently done without
    any changes to the protocol, so everything has to be either broadcast or
    to a specific client.
     channels list - specific client
     mouse mode - broadcast
     agent - broadcast
     notify - broadcast (should have two modes, and use the appropriate)
    Notable TODOs:
     * migration testing
     * agent tokens are wrongly sent (or did I fix that? check)

commit 7478cad0d2a19ae7618016b379529bcc6f287084
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Apr 11 21:44:16 2011 +0300

    server/red_channel: introduce pipes functions
    Introduce functions to add (via producer method) the same item to multiple
    pipes, all for the same channel.
    Note: Right now there is only a single channel, but the next patches will do the
    per-channel breakdown to channel and channel_client before actually introducing
    a ring in RedChannel, this makes it easier to make smaller changes - the
    channel->rcc link will exist until removed in the ring introducing patch.

commit 340cf128ca3492f699e7f2414facd9ee3ef83375
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Apr 11 21:42:05 2011 +0300

    server/red_channel: ignore error if already shutdown
    on red_channel_peer_on_incoming_error, if we are already shutdown, do not
    call the channel's error handler. Since the channel has been shutdown, we
    assume this is a second or later error, and handling has already occured.

commit 379934993ebb2fcc1a86bfb00c89a216d1c484ee
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Apr 11 20:58:01 2011 +0300

    server/main_channel: move connection_id from reds
    Expose additional api to find a client given a connection_id. The connection_id
    is first set when the first channel connects, which is the main channel.
    It could also be kept in the RedClient instead, not sure.
     multiple todo's added for multiclient handling. I don't remember why
     I wrote them exactly, and besides if I did any migration tests. So: TODO.

commit f14bb1ea46adeb524d248e30ee7160b9af3829e2
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Apr 11 18:54:51 2011 +0300

    server/main_channel: move ping here from reds.
    cleanup only. Note that the ping function is half used since the opt parameter
    stopped being called with anything but NULL, should be returned at some point,
    specifically when we drop the 250kbyte ping on start and do a continuous check
    for latency and bandwidth.
     81945d897 - server: add new vd interface QTerm2Interface, Yaniv Kamay
      introducing the usage of ping with a non NULL opt
     3f7ea8e7a - zap qterm interfaces, Gerd Hoffman
      removing it

commit ad2dc48eaa0d2f017a7876fc00e5b81830df44e0
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 10 21:11:20 2011 +0300

    server/main_channel: move latency and bitrate to channel client
    They were globals before. This introduces api for other channels
    to query the low bandwidth status. The queries themselves are still done
    from the wrong context (channel and not channel client) but that's because
    the decoupling of channel and channel client will be done in the following
    Note that snd_worker.c got two copied function declarations that belong to
    main_channel.h but can't be easily dragged into snd_worker.c since it still
    uses it's own RedChannel struct.

commit f95634035ab34d48fac10e7a42918579ecfc9af0
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 24 10:32:10 2011 +0300

    server/reds: add concept of secondary channels
    Secondary channels are those that don't support multiple clients. The
    support added in this patch just doesn't let the second or more connected
    client receive the unsupported channels in the channels list sent by the
    server to the client. This doesn't handle the situation where:
    client A connects (gets all channels)
    client B connects (gets supported multiple client channels)
    client A disconnects (Suboptimal 1: B doesn't get new channels at this point)
    client C connects (Suboptimal 2: C doesn't get the full list of channels, but
    the partial one)
    Specifically the channels that only support a single client are:
     sound (both playback and record channels)

commit 03f2a7732feafed80217d5b6e91b9209926c037b
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Apr 11 12:44:00 2011 +0300

    server: Add RedClient
    That means RedClient tracks a ring of channels. Right now there will be only
    a single client because of the disconnection mechanism - whenever a new
    client comes we disconnect all existing clients. But this patch adds already
    a ring of clients to reds.c (stored in RedServer).
    There is a known problem handling many connections and disconnections at the
    same time, trigerrable easily by the following script:
    export NEW_DISPLAY=:3.0
    Xephyr $NEW_DISPLAY -noreset &
    for ((i = 0 ; i < 5; ++i)); do
        for ((j = 0 ; j < 10; ++j)); do
            DISPLAY=$NEW_DISPLAY c_win7x86_qxl_tests &
        sleep 2;
    I fixed a few of the problems resulting from this in the same patch. This
    required already introducing a few other changes:
     * make sure all removal of channels happens in the main thread, for that
     two additional dispatcher calls are added to remove a specific channel
     * change some asserts in input channel.
     * make main channel disconnect not recursive
     * introduce disconnect call back to red_channel_create_parser
    The remaining abort is from a double free in the main channel, still can't
    find it (doesn't happen when running under valgrind - probably due to the
    slowness resulting from that), but is easy to see when running under gdb.

commit bbfb717acf2706b3a29abbc7494f51193dd1d271
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 10 21:51:58 2011 +0300

    server/main_channel+reds: make main_channel_init return MainChannelClient
    This makes it easier to introduce RedClient in the next patch.

commit 9468473c769c1a01044cf09d09b0103133e3695e
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 10 20:17:39 2011 +0300

    server/red_worker: release PIPE_ITEM_TYPE_VERB in display channel
    We send a SPICE_MSG_DISPLAY_MARK verb.

commit 73e71d90597a0a7a403869f5d6211996c597051f
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 10 20:03:11 2011 +0300

    server/red_client: clear pipe on disconnect

commit c3b76a3a375e2ba7e01246abc4c8b76619cc7eff
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 10 20:02:50 2011 +0300

    server/red_channel: workaround for fast client disconnect bug (TODO - real fix)

commit 86b5633765b6dd5badfb0c1fa8c50f5c1a6853e7
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Apr 10 18:18:11 2011 +0300

    server/main_channel: use MainChannel in sig
    use MainChannel* instead of Channel* for a many functions in main_channel.h
    (affects main_channel.c and reds.c).
    some one liner fixes are hidden in here too.

commit 938bf3ccfdcbe7a30b4be01da0d4fc71c47bc7aa
Author: Alon Levy <alevy at redhat.com>
Date:   Sat Apr 2 12:54:52 2011 +0300

    server: move pipe from RedChannel to RedChannelClient
    Another cleanup patch, no change to behavior (still one client, and it
    disconnects previous client if any).
    The implementation for multiple client is straightforward: the pipe
    remains per (channel,client) pair, so it needs to move from the RedChannel
    that to RedChannelClient. Implementation using a single pipe with multiple
    consumers (to reflect different latencies) doesn't fit well with pipe rewriting
    that is used by the display channel. Additionally this approach is much simpler
    to verify. Lastly it doesn't add considerable overhead (but see the display
    channel changes in a later patch for a real place to rethink).
    This patch is just technical, changing signatures to reflect the first
    argument (oop style) so red_channel becomes red_channel_client. Some places
    may seem odd but they should be fixed with later comits where the channels
    grow to support multiple clients.
    Sound (playback/record) channels are the only ones not touched - this is
    consistent with previous patches, since they have been left out of the
    RedChannel refactoring.  That is left as future work. (note that they don't use
    a pipe, which was the reason for not refactoring).

commit c1226aef31cfaf85f6ec7b2bbcb38dc1ebba1d8c
Author: Alon Levy <alevy at redhat.com>
Date:   Mon Nov 22 16:56:58 2010 +0200

    server/red_worker: introduce {display,cursor}_is_connected
    Instead of checking for worker->{display,cursor}_channel directly.

commit 760238e61dfeadfef2cea6c5b99a1dfc93784817
Author: Alon Levy <alevy at redhat.com>
Date:   Sat Nov 13 13:23:02 2010 +0200

    server/red_channel (all): introduce RedChannelClient
    This commit adds a RedChannelClient that now owns the stream connection,
    but still doesn't own the pipe. There is only a single RCC per RC
    right now (and RC still means RedChannel, RedClient will be introduced
    later). All internal api changes are in server/red_channel.h, hence
    the need to update all channels. red_worker.c is affected the most because
    it makes use of direct access to some of RedChannel still.
    API changes:
     1. red_channel_client_create added.
      rec_channel_create -> (red_channel_create, red_channel_client_create)
     2. two way connection: rcc->channel, channel->rcc (later channel will
      hold a list, and there will be a RedClient to hold the list of channels
      per client)
     3. seperation of channel disconnect and channel_client_disconnect

commit 0585075ddf46445df6fd69d0ae3525a80883db4e
Author: Alon Levy <alevy at redhat.com>
Date:   Thu Mar 24 18:17:17 2011 +0200

    server/red_worker: drop red_pipe_add_tail, use red_channel_pipe_add_tail
    The only difference between them being that the later also does a push.
    I don't believe that to be a problem, but if it does I can always introduce
    a push'less version.

commit 225766af4d5f95e8e663619bf63f48ead38d9e19
Author: Alon Levy <alevy at redhat.com>
Date:   Thu Mar 24 16:41:02 2011 +0200

    server/red_channel: renames to use _proc postfix consistently
    rename types - we use _proc suffix mostly to indicate function pointer types,
    use it for some function pointers that were missing it.

commit 96a0013794c7ecd9f5dbfdfb99a829d21fce58ab
Author: Alon Levy <alevy at redhat.com>
Date:   Sat Jul 2 04:23:45 2011 +0200

    spice.proto: add comment for origin of STYLED and START_WITH_GAP

commit 781704b4c2c638285e5f15c6af14e14b25c355d2
Author: Alon Levy <alevy at redhat.com>
Date:   Sat Jul 2 04:18:54 2011 +0200

    server/red_worker: explicitly include unistd and errno

commit 0e96fa8bf641b0b1d015b85e694cdd2b6c985e08
Author: Alon Levy <alevy at redhat.com>
Date:   Tue Aug 9 23:07:39 2011 +0300

    common: introduce red_printf_debug

commit d92b05548a3fb42983ff4bf8b2f17ff39366f7e6
Author: Alon Levy <alevy at redhat.com>
Date:   Fri Aug 12 21:28:28 2011 +0300

    tests/migrate.py: add --vdagent
    Adds the required options to provide a vdagent to the guest in both source and target qemu
    This will be the last update of the in spice git tests directory, I've moved those tests
    to the repository spice-tests. The longer term goal remains autotest integration, but since
    this test (and some minor others for qemu) need a home it is:
    (I'm reluctant to put it under spice/ because of my wish to go to autotest, but still, there
    they are. Nothing as permanent as the temporary).
    Independent (of external modules, i.e. qemu) tests (server/tests) should remain in tree.

commit 29342145ecbb783e2724d90860e1668e2c0606f3
Author: Yonit Halperin <yhalperi at redhat.com>
Date:   Thu Aug 4 14:00:44 2011 +0300

    server/red_worker.c: fix - locking the wrong mutex when releasing glz dict

commit 41837ecfffa3b89551b83cfd11f0d7df3519853b
Author: Alon Levy <alevy at redhat.com>
Date:   Sun Aug 7 10:26:45 2011 +0300

    server/tests/test_display_base: fix compile

commit 7f1f658fedfa6f63b99329649fd3859edccd2f96
Author: Alon Levy <alevy at redhat.com>
Date:   Tue Aug 9 13:16:27 2011 +0300

    server/tests/migrate.py: make executable

commit d97b17c2b6a458ace82b732a439ca92bf55452aa
Author: Marc-André Lureau <marcandre.lureau at gmail.com>
Date:   Thu Jul 28 18:01:53 2011 +0200

    RFC: client/x11: reuse existing platform_win
    Each time a {Dynamic,MultyMon}Scren is created, a new platform_win is
    created to receive the notifications from X11. This looks very
    suspicious already. Since I am not a xlib expert, I suppose that each
    window will receive X11 events.
    Whenever XRR ScreenChangeNotify event is received (caused by external
    process), init_monitors() is called and this will recreate new
    platform_wins. And sometime, this event happen in a loop and Xorg
    takes 100% cpu. If only one platform_win is used, the loop doesn't
    happen for me, but seem to still happen for others.
    Related bug:

More information about the Spice-commits mailing list