[Spice-devel] [PATCH 2/2] Convert RedChannelClient hierarchy to GObject

Jonathon Jongsma jjongsma at redhat.com
Wed Sep 28 15:30:16 UTC 2016


On Tue, 2016-09-27 at 05:50 -0400, Frediano Ziglio wrote:
> > 
> > 
> > Convert the RedChannelClient heirarchy into GObjects. Since the
> > existing
> > constructors could fail and return NULL, I inherited the base
> > channel
> > client from GInitable, which introduces a dependency on gio.
> > 
> > When using private structs with GObject, there's a maximum size of
> > (I
> > think) 64k, which was exceeded by some of the private structs. To
> > avoid
> > this limitation I changed some members to dynamically allocated.
> > ---
> >  configure.ac                        |   4 +-
> >  server/Makefile.am                  |   2 +
> >  server/cursor-channel-client.c      |  74 ++--
> >  server/cursor-channel-client.h      |  34 +-
> >  server/dcc-private.h                |  14 +-
> >  server/dcc.c                        | 202 ++++++++--
> >  server/dcc.h                        |  37 +-
> >  server/display-channel.c            |   4 +-
> >  server/dummy-channel-client.c       | 156 ++++++++
> >  server/dummy-channel-client.h       |  59 +++
> >  server/inputs-channel-client.c      |  56 ++-
> >  server/inputs-channel-client.h      |  47 ++-
> >  server/main-channel-client.c        | 146 +++++++-
> >  server/main-channel-client.h        |  34 +-
> >  server/red-channel-client-private.h |   4 +-
> >  server/red-channel-client.c         | 714
> >  ++++++++++++++++++++++--------------
> >  server/red-channel-client.h         |  80 +++-
> >  server/red-channel.h                |  33 +-
> >  server/reds.h                       |   1 +
> >  server/smartcard-channel-client.c   | 120 +++++-
> >  server/smartcard-channel-client.h   |  42 ++-
> >  server/smartcard.c                  |  30 +-
> >  server/sound.c                      |   9 +-
> >  server/spice-server.h               |  16 +
> >  server/spicevmc.c                   |   6 +-
> >  server/tests/test_display_base.c    |   4 +-
> >  26 files changed, 1441 insertions(+), 487 deletions(-)
> >  create mode 100644 server/dummy-channel-client.c
> >  create mode 100644 server/dummy-channel-client.h
> > 
> 
> I didn't find much time to look a bit deeper at this patch as a
> whole.
> 
> I tried to focus on the DummyChannelClient and the reason for this.
> First, this "feature" can be easily implemented supporting the
> case having stream == NULL in RedChannelClient.
> But I don't understand the rationale for this feature. It's only
> used in sound.c to handle record/playback. After a first read I
> though was to handle message encapsulated in a different way but
> sound.c use the same encapsulation. So I don't really understand
> why sound.c have to handle RedsStream directly and cannot use
> the same code provided by RedChannelClient as all other channels
> do. SndChannel seems to contain lot of code copied and pasted
> from RedChannelClient.
> I personally think that the approach should use RedChannelClient
> and not reinventing the wheel and the creation of DummyChannelClient
> is just going in the wrong direction.
> 
> Does anybody is comfortable with sound.c and can explain why
> not using ReChannelClient?
> 
> Frediano
> _______________________________________________
> Spice-devel mailing list
> Spice-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel



Yes, I agree that it's strange, and I don't like it. But as part of the
refactoring, I decided to keep the "dummy" channel client idea and just
port it to a GObject style. I did not want to do a lot of intrusive re-
designing as part of this refactory. I think we can make more
improvements later. 

Jonathon 


More information about the Spice-devel mailing list