[Spice-devel] [spice-server 1/2] reds: Move RedsState typedef to red-common.h

Jonathon Jongsma jjongsma at redhat.com
Tue Apr 5 18:24:28 UTC 2016


On Tue, 2016-04-05 at 15:37 +0200, Christophe Fergeau wrote:
> This allows to stop using struct RedsState * rather than RedsState * in
> headers which cannot include reds.h. This also allows to remove the
> duplicate RedsState typedef in reds.h and reds-stream.h which is causing
> issues with older gcc versions.
> ---
>  server/char-device.h  |  8 +++-----
>  server/main-channel.h |  4 +---
>  server/red-channel.h  | 14 ++++++--------
>  server/red-common.h   |  2 ++
>  server/reds-stream.h  |  2 +-
>  server/reds.h         |  2 --
>  6 files changed, 13 insertions(+), 19 deletions(-)
> 
> diff --git a/server/char-device.h b/server/char-device.h
> index 0a4ae5d..88961cc 100644
> --- a/server/char-device.h
> +++ b/server/char-device.h
> @@ -119,8 +119,6 @@ void red_char_device_set_callbacks(RedCharDevice *dev,
>   *
>   * */
>  
> -struct RedsState;
> -
>  /* buffer that is used for writing to the device */
>  typedef struct RedCharDeviceWriteBuffer {
>      RingItem link;
> @@ -170,7 +168,7 @@ struct RedCharDeviceCallbacks {
>  };
>  
>  RedCharDevice *red_char_device_create(SpiceCharDeviceInstance *sin,
> -                                      struct RedsState *reds,
> +                                      RedsState *reds,
>                                        uint32_t client_tokens_interval,
>                                        uint32_t self_tokens,
>                                        RedCharDeviceCallbacks *cbs,
> @@ -253,10 +251,10 @@ void red_char_device_write_buffer_release(RedCharDevice
> *dev,
>  
>  /* api for specific char devices */
>  
> -RedCharDevice *spicevmc_device_connect(struct RedsState *reds,
> +RedCharDevice *spicevmc_device_connect(RedsState *reds,
>                                         SpiceCharDeviceInstance *sin,
>                                         uint8_t channel_type);
> -void spicevmc_device_disconnect(struct RedsState *reds,
> +void spicevmc_device_disconnect(RedsState *reds,
>                                  SpiceCharDeviceInstance *char_device);
>  
>  SpiceCharDeviceInterface
> *spice_char_device_get_interface(SpiceCharDeviceInstance *instance);
> diff --git a/server/main-channel.h b/server/main-channel.h
> index 26e2129..fd16c94 100644
> --- a/server/main-channel.h
> +++ b/server/main-channel.h
> @@ -32,8 +32,6 @@
>  #define MAIN_CHANNEL_RECEIVE_BUF_SIZE \
>      (4096 + (REDS_AGENT_WINDOW_SIZE + REDS_NUM_INTERNAL_AGENT_MESSAGES) *
> SPICE_AGENT_MAX_DATA_SIZE)
>  
> -struct RedsState;
> -
>  struct RedsMigSpice {
>      char *host;
>      char *cert_subject;
> @@ -50,7 +48,7 @@ typedef struct MainChannel {
>  } MainChannel;
>  
>  
> -MainChannel *main_channel_new(struct RedsState *reds);
> +MainChannel *main_channel_new(RedsState *reds);
>  RedClient *main_channel_get_client_by_link_id(MainChannel *main_chan,
> uint32_t link_id);
>  /* This is a 'clone' from the reds.h Channel.link callback to allow passing
> link_id */
>  MainChannelClient *main_channel_link(MainChannel *, RedClient *client,
> diff --git a/server/red-channel.h b/server/red-channel.h
> index c3aeda6..94b09eb 100644
> --- a/server/red-channel.h
> +++ b/server/red-channel.h
> @@ -47,8 +47,6 @@
>     The intention is to move towards one channel interface gradually.
>     At the final stage, this interface shouldn't be exposed. Only RedChannel
> will use it. */
>  
> -struct RedsState;
> -
>  typedef struct SpiceDataHeaderOpaque SpiceDataHeaderOpaque;
>  
>  typedef uint16_t (*get_msg_type_proc)(SpiceDataHeaderOpaque *header);
> @@ -339,7 +337,7 @@ struct RedChannel {
>  
>      // TODO: when different channel_clients are in different threads from
> Channel -> need to protect!
>      pthread_t thread_id;
> -    struct RedsState *reds;
> +    RedsState *reds;
>  #ifdef RED_STATISTICS
>      StatNodeRef stat;
>      uint64_t *out_bytes_counter;
> @@ -362,7 +360,7 @@ struct RedChannel {
>  /* if one of the callbacks should cause disconnect, use red_channel_shutdown
> and don't
>   * explicitly destroy the channel */
>  RedChannel *red_channel_create(int size,
> -                               struct RedsState *reds,
> +                               RedsState *reds,
>                                 const SpiceCoreInterfaceInternal *core,
>                                 uint32_t type, uint32_t id,
>                                 int handle_acks,
> @@ -373,7 +371,7 @@ RedChannel *red_channel_create(int size,
>  /* alternative constructor, meant for marshaller based (inputs,main)
> channels,
>   * will become default eventually */
>  RedChannel *red_channel_create_parser(int size,
> -                                      struct RedsState *reds,
> +                                      RedsState *reds,
>                                        const SpiceCoreInterfaceInternal *core,
>                                        uint32_t type, uint32_t id,
>                                        int handle_acks,
> @@ -396,7 +394,7 @@ RedChannelClient *red_channel_client_create(int size,
> RedChannel *channel, RedCl
>  // TODO: tmp, for channels that don't use RedChannel yet (e.g., snd channel),
> but
>  // do use the client callbacks. So the channel clients are not connected (the
> channel doesn't
>  // have list of them, but they do have a link to the channel, and the client
> has a list of them)
> -RedChannel *red_channel_create_dummy(int size, struct RedsState *reds,
> uint32_t type, uint32_t id);
> +RedChannel *red_channel_create_dummy(int size, RedsState *reds, uint32_t
> type, uint32_t id);
>  RedChannelClient *red_channel_client_create_dummy(int size,
>                                                    RedChannel *channel,
>                                                    RedClient  *client,
> @@ -569,7 +567,7 @@ void red_channel_apply_clients(RedChannel *channel,
> channel_client_callback v);
>  struct RedsState* red_channel_get_server(RedChannel *channel);
>  
>  struct RedClient {
> -    struct RedsState *reds;
> +    RedsState *reds;
>      RingItem link;
>      Ring channels;
>      int channels_num;
> @@ -591,7 +589,7 @@ struct RedClient {
>      int refs;
>  };
>  
> -RedClient *red_client_new(struct RedsState *reds, int migrated);
> +RedClient *red_client_new(RedsState *reds, int migrated);
>  
>  /*
>   * disconnects all the client's channels (should be called from the client's
> thread)
> diff --git a/server/red-common.h b/server/red-common.h
> index 90a7d20..a9339fb 100644
> --- a/server/red-common.h
> +++ b/server/red-common.h
> @@ -58,4 +58,6 @@ struct SpiceCoreInterfaceInternal {
>  
>  extern SpiceCoreInterfaceInternal event_loop_core;
>  
> +typedef struct RedsState RedsState;
> +
>  #endif
> diff --git a/server/reds-stream.h b/server/reds-stream.h
> index 1123048..705d7fd 100644
> --- a/server/reds-stream.h
> +++ b/server/reds-stream.h
> @@ -20,6 +20,7 @@
>  
>  #include "spice.h"
>  #include "common/mem.h"
> +#include "red-common.h"
>  
>  #include <stdbool.h>
>  
> @@ -28,7 +29,6 @@
>  typedef void (*AsyncReadDone)(void *opaque);
>  typedef void (*AsyncReadError)(void *opaque, int err);
>  
> -typedef struct RedsState RedsState;
>  typedef struct RedsStream RedsStream;
>  typedef struct RedsStreamPrivate RedsStreamPrivate;
>  
> diff --git a/server/reds.h b/server/reds.h
> index 83618e9..2cfd451 100644
> --- a/server/reds.h
> +++ b/server/reds.h
> @@ -32,8 +32,6 @@
>  #include "main-dispatcher.h"
>  #include "migration-protocol.h"
>  
> -typedef struct RedsState RedsState;
> -
>  static inline QXLInterface * qxl_get_interface(QXLInstance *qxl)
>  {
>      return SPICE_CONTAINEROF(qxl->base.sif, QXLInterface, base);

Acked-by: Jonathon Jongsma <jjongsma at redhat.com>


More information about the Spice-devel mailing list