[Spice-devel] [PATCH spice-server 0/4] Refactor RedChannel ClientCbs

Christophe de Dinechin cdupontd at redhat.com
Wed Aug 30 07:52:51 UTC 2017


> On 30 Aug 2017, at 09:31, Frediano Ziglio <fziglio at redhat.com> wrote:
> 
>> This is an alternate proposal to the patch Frediano sent recently which
>> includes the data argument in the ClientCbs struct and removes the
>> g_object_get|set_data() calls.
>> 
>> This series also removes the GObject data stuff, but also does some
>> deeper refactoring.
>> 
> 
> 
> Honestly does not seem that great.
> 
> It assumes CursorChannel and DisplayChannel will always have an
> associated QXL device. There are different patches that remove this
> needs for CursorChannel.

I believe you meant “that remove this requirement”. As written, it means
that you don’t need a CursorChannel, but I believe the CursorChannel
is still there, only the QXL device in it is gone, right?

> 
> The original design was that these callbacks could be overridden
> to make any channel (type+id meaning) run in a separate thread.
> Now we are forced to either use from the main thread or from a
> separate one.

Unfortunately, I’m confused by your explanation. Please clarify:

- By “the original design”, you mean your patch series, or the code before?
(I believe it’s your patch series)

- By “now”, you mean “Jonathon’s patch”, or your patch?
(I believe you mean Jonathon’s patch)

- Why is being able to use the main thread or a separate one more “forced”
than (always?) making a channel run in a separate thread? Naively, it seems
like there are more choices in the “forced” case (namely, the main thread).
So I think you wanted to write something else than what you wrote. But that
part I was unable to make sense of by myself, so that’s really my primary question :-)

In any case, if you do another iteration of your patch series, would it be possible
to make sure this explanation is part of the envelope or commit message?


> For instance in my streaming patches I use the CursorChannel
> from the main thread, now I would have to:
> - write a fake QXL device to make CursorChannel happy;
> - create a new Dispatcher to handle requests from CursorChannel;
> - create another thread to handle synchronous calls (like
>  disconnect)

Is the CursorChannel the only one running from the main thread?
If so, what would be the rationale / trade-off for choosing one approach
vs. the other? I.e. if I add a new channel, what do I pick?


> Also make harder to understand why these calls are separate
> as they are just some different methods while before were
> contained in a different structure.


> 
> I really Nack this approach.
> 
> Frediano
> 
>> Jonathon Jongsma (4):
>>  red-worker: don't pass 'dispatcher' as data for ClientCbs
>>  red-qxl: remove use of g_object_get_data()
>>  Move Cursor and Display client cbs to channel file
>>  Convert ClientCbs to channel virtual functions
>> 
>> server/common-graphics-channel.c |   1 -
>> server/cursor-channel.c          |  63 +++++++++++++++++++
>> server/display-channel.c         |  69 +++++++++++++++++++++
>> server/inputs-channel.c          |  11 ++--
>> server/main-channel-client.c     |   8 ---
>> server/main-channel-client.h     |   1 -
>> server/main-channel.c            |  13 ++--
>> server/red-channel.c             |  54 +++++++---------
>> server/red-channel.h             |  25 ++++----
>> server/red-qxl.c                 | 129
>> +--------------------------------------
>> server/red-worker.c              |  11 +---
>> server/red-worker.h              |   4 +-
>> server/smartcard.c               |   6 +-
>> server/sound.c                   |  21 +++----
>> server/spicevmc.c                |   7 +--
>> 15 files changed, 196 insertions(+), 227 deletions(-)
>> 
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel



More information about the Spice-devel mailing list