[spice-server,1/2] event-loop: Move adapter interface from reds.c

Submitted by Frediano Ziglio on Aug. 6, 2019, 2:52 p.m.

Details

Message ID 20190806145250.31813-1-fziglio@redhat.com
State Accepted
Commit 97d2d1f129d5d76ff895c0948100b1085b7c4d60
Headers show
Series "Series without cover letter" ( rev: 2 1 ) in Spice

Not browsing as part of any series.

Commit Message

Frediano Ziglio Aug. 6, 2019, 2:52 p.m.
Put more event loop code in event-loop.c.
This is a preparation patch for the next one.

Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
---
 server/event-loop.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
 server/red-common.h |  1 +
 server/reds.c       | 54 -----------------------------------------
 3 files changed, 59 insertions(+), 54 deletions(-)

Patch hide | download patch | download mbox

diff --git a/server/event-loop.c b/server/event-loop.c
index 812c3a53b..1ccfd671f 100644
--- a/server/event-loop.c
+++ b/server/event-loop.c
@@ -264,3 +264,61 @@  const SpiceCoreInterfaceInternal event_loop_core = {
     .watch_update_mask = watch_update_mask,
     .watch_remove = watch_remove,
 };
+
+/*
+ * Adapter for SpiceCodeInterface
+ */
+
+static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal *iface, SpiceTimerFunc func, void *opaque)
+{
+    return iface->public_interface->timer_add(func, opaque);
+}
+
+static void adapter_timer_start(const SpiceCoreInterfaceInternal *iface, SpiceTimer *timer, uint32_t ms)
+{
+    iface->public_interface->timer_start(timer, ms);
+}
+
+static void adapter_timer_cancel(const SpiceCoreInterfaceInternal *iface, SpiceTimer *timer)
+{
+    iface->public_interface->timer_cancel(timer);
+}
+
+static void adapter_timer_remove(const SpiceCoreInterfaceInternal *iface, SpiceTimer *timer)
+{
+    iface->public_interface->timer_remove(timer);
+}
+
+static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal *iface,
+                                     int fd, int event_mask, SpiceWatchFunc func, void *opaque)
+{
+    // note: Qemu API is fine having a SOCKET on Windows
+    return iface->public_interface->watch_add(fd, event_mask, func, opaque);
+}
+
+static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal *iface, SpiceWatch *watch, int event_mask)
+{
+    iface->public_interface->watch_update_mask(watch, event_mask);
+}
+
+static void adapter_watch_remove(const SpiceCoreInterfaceInternal *iface, SpiceWatch *watch)
+{
+    iface->public_interface->watch_remove(watch);
+}
+
+static void adapter_channel_event(const SpiceCoreInterfaceInternal *iface, int event, SpiceChannelEventInfo *info)
+{
+    if (iface->public_interface->base.minor_version >= 3 && iface->public_interface->channel_event != NULL)
+        iface->public_interface->channel_event(event, info);
+}
+
+const SpiceCoreInterfaceInternal core_interface_adapter = {
+    .timer_add = adapter_timer_add,
+    .timer_start = adapter_timer_start,
+    .timer_cancel = adapter_timer_cancel,
+    .timer_remove = adapter_timer_remove,
+    .watch_add = adapter_watch_add,
+    .watch_update_mask = adapter_watch_update_mask,
+    .watch_remove = adapter_watch_remove,
+    .channel_event = adapter_channel_event,
+};
diff --git a/server/red-common.h b/server/red-common.h
index 223f28690..22ea8fc37 100644
--- a/server/red-common.h
+++ b/server/red-common.h
@@ -71,6 +71,7 @@  struct SpiceCoreInterfaceInternal {
 };
 
 extern const SpiceCoreInterfaceInternal event_loop_core;
+extern const SpiceCoreInterfaceInternal core_interface_adapter;
 
 typedef struct RedsState RedsState;
 
diff --git a/server/reds.c b/server/reds.c
index a3795ab90..f432f55a4 100644
--- a/server/reds.c
+++ b/server/reds.c
@@ -83,60 +83,6 @@  static void reds_client_monitors_config(RedsState *reds, VDAgentMonitorsConfig *
 static gboolean reds_use_client_monitors_config(RedsState *reds);
 static void reds_set_video_codecs(RedsState *reds, GArray *video_codecs);
 
-static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal *iface, SpiceTimerFunc func, void *opaque)
-{
-    return iface->public_interface->timer_add(func, opaque);
-}
-
-static void adapter_timer_start(const SpiceCoreInterfaceInternal *iface, SpiceTimer *timer, uint32_t ms)
-{
-    iface->public_interface->timer_start(timer, ms);
-}
-
-static void adapter_timer_cancel(const SpiceCoreInterfaceInternal *iface, SpiceTimer *timer)
-{
-    iface->public_interface->timer_cancel(timer);
-}
-
-static void adapter_timer_remove(const SpiceCoreInterfaceInternal *iface, SpiceTimer *timer)
-{
-    iface->public_interface->timer_remove(timer);
-}
-
-static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal *iface,
-                                     int fd, int event_mask, SpiceWatchFunc func, void *opaque)
-{
-    // note: Qemu API is fine having a SOCKET on Windows
-    return iface->public_interface->watch_add(fd, event_mask, func, opaque);
-}
-
-static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal *iface, SpiceWatch *watch, int event_mask)
-{
-    iface->public_interface->watch_update_mask(watch, event_mask);
-}
-
-static void adapter_watch_remove(const SpiceCoreInterfaceInternal *iface, SpiceWatch *watch)
-{
-    iface->public_interface->watch_remove(watch);
-}
-
-static void adapter_channel_event(const SpiceCoreInterfaceInternal *iface, int event, SpiceChannelEventInfo *info)
-{
-    if (iface->public_interface->base.minor_version >= 3 && iface->public_interface->channel_event != NULL)
-        iface->public_interface->channel_event(event, info);
-}
-
-static const SpiceCoreInterfaceInternal core_interface_adapter = {
-    .timer_add = adapter_timer_add,
-    .timer_start = adapter_timer_start,
-    .timer_cancel = adapter_timer_cancel,
-    .timer_remove = adapter_timer_remove,
-    .watch_add = adapter_watch_add,
-    .watch_update_mask = adapter_watch_update_mask,
-    .watch_remove = adapter_watch_remove,
-    .channel_event = adapter_channel_event,
-};
-
 /* Debugging only variable: allow multiple client connections to the spice
  * server */
 #define SPICE_DEBUG_ALLOW_MC_ENV "SPICE_DEBUG_ALLOW_MC"

Comments

ping the series

> 
> Put more event loop code in event-loop.c.
> This is a preparation patch for the next one.
> 
> Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
> ---
>  server/event-loop.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
>  server/red-common.h |  1 +
>  server/reds.c       | 54 -----------------------------------------
>  3 files changed, 59 insertions(+), 54 deletions(-)
> 
> diff --git a/server/event-loop.c b/server/event-loop.c
> index 812c3a53b..1ccfd671f 100644
> --- a/server/event-loop.c
> +++ b/server/event-loop.c
> @@ -264,3 +264,61 @@ const SpiceCoreInterfaceInternal event_loop_core = {
>      .watch_update_mask = watch_update_mask,
>      .watch_remove = watch_remove,
>  };
> +
> +/*
> + * Adapter for SpiceCodeInterface
> + */
> +
> +static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal
> *iface, SpiceTimerFunc func, void *opaque)
> +{
> +    return iface->public_interface->timer_add(func, opaque);
> +}
> +
> +static void adapter_timer_start(const SpiceCoreInterfaceInternal *iface,
> SpiceTimer *timer, uint32_t ms)
> +{
> +    iface->public_interface->timer_start(timer, ms);
> +}
> +
> +static void adapter_timer_cancel(const SpiceCoreInterfaceInternal *iface,
> SpiceTimer *timer)
> +{
> +    iface->public_interface->timer_cancel(timer);
> +}
> +
> +static void adapter_timer_remove(const SpiceCoreInterfaceInternal *iface,
> SpiceTimer *timer)
> +{
> +    iface->public_interface->timer_remove(timer);
> +}
> +
> +static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal
> *iface,
> +                                     int fd, int event_mask, SpiceWatchFunc
> func, void *opaque)
> +{
> +    // note: Qemu API is fine having a SOCKET on Windows
> +    return iface->public_interface->watch_add(fd, event_mask, func, opaque);
> +}
> +
> +static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal
> *iface, SpiceWatch *watch, int event_mask)
> +{
> +    iface->public_interface->watch_update_mask(watch, event_mask);
> +}
> +
> +static void adapter_watch_remove(const SpiceCoreInterfaceInternal *iface,
> SpiceWatch *watch)
> +{
> +    iface->public_interface->watch_remove(watch);
> +}
> +
> +static void adapter_channel_event(const SpiceCoreInterfaceInternal *iface,
> int event, SpiceChannelEventInfo *info)
> +{
> +    if (iface->public_interface->base.minor_version >= 3 &&
> iface->public_interface->channel_event != NULL)
> +        iface->public_interface->channel_event(event, info);
> +}
> +
> +const SpiceCoreInterfaceInternal core_interface_adapter = {
> +    .timer_add = adapter_timer_add,
> +    .timer_start = adapter_timer_start,
> +    .timer_cancel = adapter_timer_cancel,
> +    .timer_remove = adapter_timer_remove,
> +    .watch_add = adapter_watch_add,
> +    .watch_update_mask = adapter_watch_update_mask,
> +    .watch_remove = adapter_watch_remove,
> +    .channel_event = adapter_channel_event,
> +};
> diff --git a/server/red-common.h b/server/red-common.h
> index 223f28690..22ea8fc37 100644
> --- a/server/red-common.h
> +++ b/server/red-common.h
> @@ -71,6 +71,7 @@ struct SpiceCoreInterfaceInternal {
>  };
>  
>  extern const SpiceCoreInterfaceInternal event_loop_core;
> +extern const SpiceCoreInterfaceInternal core_interface_adapter;
>  
>  typedef struct RedsState RedsState;
>  
> diff --git a/server/reds.c b/server/reds.c
> index a3795ab90..f432f55a4 100644
> --- a/server/reds.c
> +++ b/server/reds.c
> @@ -83,60 +83,6 @@ static void reds_client_monitors_config(RedsState *reds,
> VDAgentMonitorsConfig *
>  static gboolean reds_use_client_monitors_config(RedsState *reds);
>  static void reds_set_video_codecs(RedsState *reds, GArray *video_codecs);
>  
> -static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal
> *iface, SpiceTimerFunc func, void *opaque)
> -{
> -    return iface->public_interface->timer_add(func, opaque);
> -}
> -
> -static void adapter_timer_start(const SpiceCoreInterfaceInternal *iface,
> SpiceTimer *timer, uint32_t ms)
> -{
> -    iface->public_interface->timer_start(timer, ms);
> -}
> -
> -static void adapter_timer_cancel(const SpiceCoreInterfaceInternal *iface,
> SpiceTimer *timer)
> -{
> -    iface->public_interface->timer_cancel(timer);
> -}
> -
> -static void adapter_timer_remove(const SpiceCoreInterfaceInternal *iface,
> SpiceTimer *timer)
> -{
> -    iface->public_interface->timer_remove(timer);
> -}
> -
> -static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal
> *iface,
> -                                     int fd, int event_mask, SpiceWatchFunc
> func, void *opaque)
> -{
> -    // note: Qemu API is fine having a SOCKET on Windows
> -    return iface->public_interface->watch_add(fd, event_mask, func, opaque);
> -}
> -
> -static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal
> *iface, SpiceWatch *watch, int event_mask)
> -{
> -    iface->public_interface->watch_update_mask(watch, event_mask);
> -}
> -
> -static void adapter_watch_remove(const SpiceCoreInterfaceInternal *iface,
> SpiceWatch *watch)
> -{
> -    iface->public_interface->watch_remove(watch);
> -}
> -
> -static void adapter_channel_event(const SpiceCoreInterfaceInternal *iface,
> int event, SpiceChannelEventInfo *info)
> -{
> -    if (iface->public_interface->base.minor_version >= 3 &&
> iface->public_interface->channel_event != NULL)
> -        iface->public_interface->channel_event(event, info);
> -}
> -
> -static const SpiceCoreInterfaceInternal core_interface_adapter = {
> -    .timer_add = adapter_timer_add,
> -    .timer_start = adapter_timer_start,
> -    .timer_cancel = adapter_timer_cancel,
> -    .timer_remove = adapter_timer_remove,
> -    .watch_add = adapter_watch_add,
> -    .watch_update_mask = adapter_watch_update_mask,
> -    .watch_remove = adapter_watch_remove,
> -    .channel_event = adapter_channel_event,
> -};
> -
>  /* Debugging only variable: allow multiple client connections to the spice
>   * server */
>  #define SPICE_DEBUG_ALLOW_MC_ENV "SPICE_DEBUG_ALLOW_MC"
ping

> 
> ping the series
> 
> > 
> > Put more event loop code in event-loop.c.
> > This is a preparation patch for the next one.
> > 
> > Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
> > ---
> >  server/event-loop.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
> >  server/red-common.h |  1 +
> >  server/reds.c       | 54 -----------------------------------------
> >  3 files changed, 59 insertions(+), 54 deletions(-)
> > 
> > diff --git a/server/event-loop.c b/server/event-loop.c
> > index 812c3a53b..1ccfd671f 100644
> > --- a/server/event-loop.c
> > +++ b/server/event-loop.c
> > @@ -264,3 +264,61 @@ const SpiceCoreInterfaceInternal event_loop_core = {
> >      .watch_update_mask = watch_update_mask,
> >      .watch_remove = watch_remove,
> >  };
> > +
> > +/*
> > + * Adapter for SpiceCodeInterface
> > + */
> > +
> > +static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal
> > *iface, SpiceTimerFunc func, void *opaque)
> > +{
> > +    return iface->public_interface->timer_add(func, opaque);
> > +}
> > +
> > +static void adapter_timer_start(const SpiceCoreInterfaceInternal *iface,
> > SpiceTimer *timer, uint32_t ms)
> > +{
> > +    iface->public_interface->timer_start(timer, ms);
> > +}
> > +
> > +static void adapter_timer_cancel(const SpiceCoreInterfaceInternal *iface,
> > SpiceTimer *timer)
> > +{
> > +    iface->public_interface->timer_cancel(timer);
> > +}
> > +
> > +static void adapter_timer_remove(const SpiceCoreInterfaceInternal *iface,
> > SpiceTimer *timer)
> > +{
> > +    iface->public_interface->timer_remove(timer);
> > +}
> > +
> > +static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal
> > *iface,
> > +                                     int fd, int event_mask,
> > SpiceWatchFunc
> > func, void *opaque)
> > +{
> > +    // note: Qemu API is fine having a SOCKET on Windows
> > +    return iface->public_interface->watch_add(fd, event_mask, func,
> > opaque);
> > +}
> > +
> > +static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal
> > *iface, SpiceWatch *watch, int event_mask)
> > +{
> > +    iface->public_interface->watch_update_mask(watch, event_mask);
> > +}
> > +
> > +static void adapter_watch_remove(const SpiceCoreInterfaceInternal *iface,
> > SpiceWatch *watch)
> > +{
> > +    iface->public_interface->watch_remove(watch);
> > +}
> > +
> > +static void adapter_channel_event(const SpiceCoreInterfaceInternal *iface,
> > int event, SpiceChannelEventInfo *info)
> > +{
> > +    if (iface->public_interface->base.minor_version >= 3 &&
> > iface->public_interface->channel_event != NULL)
> > +        iface->public_interface->channel_event(event, info);
> > +}
> > +
> > +const SpiceCoreInterfaceInternal core_interface_adapter = {
> > +    .timer_add = adapter_timer_add,
> > +    .timer_start = adapter_timer_start,
> > +    .timer_cancel = adapter_timer_cancel,
> > +    .timer_remove = adapter_timer_remove,
> > +    .watch_add = adapter_watch_add,
> > +    .watch_update_mask = adapter_watch_update_mask,
> > +    .watch_remove = adapter_watch_remove,
> > +    .channel_event = adapter_channel_event,
> > +};
> > diff --git a/server/red-common.h b/server/red-common.h
> > index 223f28690..22ea8fc37 100644
> > --- a/server/red-common.h
> > +++ b/server/red-common.h
> > @@ -71,6 +71,7 @@ struct SpiceCoreInterfaceInternal {
> >  };
> >  
> >  extern const SpiceCoreInterfaceInternal event_loop_core;
> > +extern const SpiceCoreInterfaceInternal core_interface_adapter;
> >  
> >  typedef struct RedsState RedsState;
> >  
> > diff --git a/server/reds.c b/server/reds.c
> > index a3795ab90..f432f55a4 100644
> > --- a/server/reds.c
> > +++ b/server/reds.c
> > @@ -83,60 +83,6 @@ static void reds_client_monitors_config(RedsState *reds,
> > VDAgentMonitorsConfig *
> >  static gboolean reds_use_client_monitors_config(RedsState *reds);
> >  static void reds_set_video_codecs(RedsState *reds, GArray *video_codecs);
> >  
> > -static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal
> > *iface, SpiceTimerFunc func, void *opaque)
> > -{
> > -    return iface->public_interface->timer_add(func, opaque);
> > -}
> > -
> > -static void adapter_timer_start(const SpiceCoreInterfaceInternal *iface,
> > SpiceTimer *timer, uint32_t ms)
> > -{
> > -    iface->public_interface->timer_start(timer, ms);
> > -}
> > -
> > -static void adapter_timer_cancel(const SpiceCoreInterfaceInternal *iface,
> > SpiceTimer *timer)
> > -{
> > -    iface->public_interface->timer_cancel(timer);
> > -}
> > -
> > -static void adapter_timer_remove(const SpiceCoreInterfaceInternal *iface,
> > SpiceTimer *timer)
> > -{
> > -    iface->public_interface->timer_remove(timer);
> > -}
> > -
> > -static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal
> > *iface,
> > -                                     int fd, int event_mask,
> > SpiceWatchFunc
> > func, void *opaque)
> > -{
> > -    // note: Qemu API is fine having a SOCKET on Windows
> > -    return iface->public_interface->watch_add(fd, event_mask, func,
> > opaque);
> > -}
> > -
> > -static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal
> > *iface, SpiceWatch *watch, int event_mask)
> > -{
> > -    iface->public_interface->watch_update_mask(watch, event_mask);
> > -}
> > -
> > -static void adapter_watch_remove(const SpiceCoreInterfaceInternal *iface,
> > SpiceWatch *watch)
> > -{
> > -    iface->public_interface->watch_remove(watch);
> > -}
> > -
> > -static void adapter_channel_event(const SpiceCoreInterfaceInternal *iface,
> > int event, SpiceChannelEventInfo *info)
> > -{
> > -    if (iface->public_interface->base.minor_version >= 3 &&
> > iface->public_interface->channel_event != NULL)
> > -        iface->public_interface->channel_event(event, info);
> > -}
> > -
> > -static const SpiceCoreInterfaceInternal core_interface_adapter = {
> > -    .timer_add = adapter_timer_add,
> > -    .timer_start = adapter_timer_start,
> > -    .timer_cancel = adapter_timer_cancel,
> > -    .timer_remove = adapter_timer_remove,
> > -    .watch_add = adapter_watch_add,
> > -    .watch_update_mask = adapter_watch_update_mask,
> > -    .watch_remove = adapter_watch_remove,
> > -    .channel_event = adapter_channel_event,
> > -};
> > -
> >  /* Debugging only variable: allow multiple client connections to the spice
> >   * server */
> >  #define SPICE_DEBUG_ALLOW_MC_ENV "SPICE_DEBUG_ALLOW_MC"
ping

> 
> ping
> 
> > 
> > ping the series
> > 
> > > 
> > > Put more event loop code in event-loop.c.
> > > This is a preparation patch for the next one.
> > > 
> > > Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
> > > ---
> > >  server/event-loop.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
> > >  server/red-common.h |  1 +
> > >  server/reds.c       | 54 -----------------------------------------
> > >  3 files changed, 59 insertions(+), 54 deletions(-)
> > > 
> > > diff --git a/server/event-loop.c b/server/event-loop.c
> > > index 812c3a53b..1ccfd671f 100644
> > > --- a/server/event-loop.c
> > > +++ b/server/event-loop.c
> > > @@ -264,3 +264,61 @@ const SpiceCoreInterfaceInternal event_loop_core = {
> > >      .watch_update_mask = watch_update_mask,
> > >      .watch_remove = watch_remove,
> > >  };
> > > +
> > > +/*
> > > + * Adapter for SpiceCodeInterface
> > > + */
> > > +
> > > +static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal
> > > *iface, SpiceTimerFunc func, void *opaque)
> > > +{
> > > +    return iface->public_interface->timer_add(func, opaque);
> > > +}
> > > +
> > > +static void adapter_timer_start(const SpiceCoreInterfaceInternal *iface,
> > > SpiceTimer *timer, uint32_t ms)
> > > +{
> > > +    iface->public_interface->timer_start(timer, ms);
> > > +}
> > > +
> > > +static void adapter_timer_cancel(const SpiceCoreInterfaceInternal
> > > *iface,
> > > SpiceTimer *timer)
> > > +{
> > > +    iface->public_interface->timer_cancel(timer);
> > > +}
> > > +
> > > +static void adapter_timer_remove(const SpiceCoreInterfaceInternal
> > > *iface,
> > > SpiceTimer *timer)
> > > +{
> > > +    iface->public_interface->timer_remove(timer);
> > > +}
> > > +
> > > +static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal
> > > *iface,
> > > +                                     int fd, int event_mask,
> > > SpiceWatchFunc
> > > func, void *opaque)
> > > +{
> > > +    // note: Qemu API is fine having a SOCKET on Windows
> > > +    return iface->public_interface->watch_add(fd, event_mask, func,
> > > opaque);
> > > +}
> > > +
> > > +static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal
> > > *iface, SpiceWatch *watch, int event_mask)
> > > +{
> > > +    iface->public_interface->watch_update_mask(watch, event_mask);
> > > +}
> > > +
> > > +static void adapter_watch_remove(const SpiceCoreInterfaceInternal
> > > *iface,
> > > SpiceWatch *watch)
> > > +{
> > > +    iface->public_interface->watch_remove(watch);
> > > +}
> > > +
> > > +static void adapter_channel_event(const SpiceCoreInterfaceInternal
> > > *iface,
> > > int event, SpiceChannelEventInfo *info)
> > > +{
> > > +    if (iface->public_interface->base.minor_version >= 3 &&
> > > iface->public_interface->channel_event != NULL)
> > > +        iface->public_interface->channel_event(event, info);
> > > +}
> > > +
> > > +const SpiceCoreInterfaceInternal core_interface_adapter = {
> > > +    .timer_add = adapter_timer_add,
> > > +    .timer_start = adapter_timer_start,
> > > +    .timer_cancel = adapter_timer_cancel,
> > > +    .timer_remove = adapter_timer_remove,
> > > +    .watch_add = adapter_watch_add,
> > > +    .watch_update_mask = adapter_watch_update_mask,
> > > +    .watch_remove = adapter_watch_remove,
> > > +    .channel_event = adapter_channel_event,
> > > +};
> > > diff --git a/server/red-common.h b/server/red-common.h
> > > index 223f28690..22ea8fc37 100644
> > > --- a/server/red-common.h
> > > +++ b/server/red-common.h
> > > @@ -71,6 +71,7 @@ struct SpiceCoreInterfaceInternal {
> > >  };
> > >  
> > >  extern const SpiceCoreInterfaceInternal event_loop_core;
> > > +extern const SpiceCoreInterfaceInternal core_interface_adapter;
> > >  
> > >  typedef struct RedsState RedsState;
> > >  
> > > diff --git a/server/reds.c b/server/reds.c
> > > index a3795ab90..f432f55a4 100644
> > > --- a/server/reds.c
> > > +++ b/server/reds.c
> > > @@ -83,60 +83,6 @@ static void reds_client_monitors_config(RedsState
> > > *reds,
> > > VDAgentMonitorsConfig *
> > >  static gboolean reds_use_client_monitors_config(RedsState *reds);
> > >  static void reds_set_video_codecs(RedsState *reds, GArray
> > >  *video_codecs);
> > >  
> > > -static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal
> > > *iface, SpiceTimerFunc func, void *opaque)
> > > -{
> > > -    return iface->public_interface->timer_add(func, opaque);
> > > -}
> > > -
> > > -static void adapter_timer_start(const SpiceCoreInterfaceInternal *iface,
> > > SpiceTimer *timer, uint32_t ms)
> > > -{
> > > -    iface->public_interface->timer_start(timer, ms);
> > > -}
> > > -
> > > -static void adapter_timer_cancel(const SpiceCoreInterfaceInternal
> > > *iface,
> > > SpiceTimer *timer)
> > > -{
> > > -    iface->public_interface->timer_cancel(timer);
> > > -}
> > > -
> > > -static void adapter_timer_remove(const SpiceCoreInterfaceInternal
> > > *iface,
> > > SpiceTimer *timer)
> > > -{
> > > -    iface->public_interface->timer_remove(timer);
> > > -}
> > > -
> > > -static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal
> > > *iface,
> > > -                                     int fd, int event_mask,
> > > SpiceWatchFunc
> > > func, void *opaque)
> > > -{
> > > -    // note: Qemu API is fine having a SOCKET on Windows
> > > -    return iface->public_interface->watch_add(fd, event_mask, func,
> > > opaque);
> > > -}
> > > -
> > > -static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal
> > > *iface, SpiceWatch *watch, int event_mask)
> > > -{
> > > -    iface->public_interface->watch_update_mask(watch, event_mask);
> > > -}
> > > -
> > > -static void adapter_watch_remove(const SpiceCoreInterfaceInternal
> > > *iface,
> > > SpiceWatch *watch)
> > > -{
> > > -    iface->public_interface->watch_remove(watch);
> > > -}
> > > -
> > > -static void adapter_channel_event(const SpiceCoreInterfaceInternal
> > > *iface,
> > > int event, SpiceChannelEventInfo *info)
> > > -{
> > > -    if (iface->public_interface->base.minor_version >= 3 &&
> > > iface->public_interface->channel_event != NULL)
> > > -        iface->public_interface->channel_event(event, info);
> > > -}
> > > -
> > > -static const SpiceCoreInterfaceInternal core_interface_adapter = {
> > > -    .timer_add = adapter_timer_add,
> > > -    .timer_start = adapter_timer_start,
> > > -    .timer_cancel = adapter_timer_cancel,
> > > -    .timer_remove = adapter_timer_remove,
> > > -    .watch_add = adapter_watch_add,
> > > -    .watch_update_mask = adapter_watch_update_mask,
> > > -    .watch_remove = adapter_watch_remove,
> > > -    .channel_event = adapter_channel_event,
> > > -};
> > > -
> > >  /* Debugging only variable: allow multiple client connections to the
> > >  spice
> > >   * server */
> > >  #define SPICE_DEBUG_ALLOW_MC_ENV "SPICE_DEBUG_ALLOW_MC"
ping

> 
> ping
> 
> > 
> > ping
> > 
> > > 
> > > ping the series
> > > 
> > > > 
> > > > Put more event loop code in event-loop.c.
> > > > This is a preparation patch for the next one.
> > > > 
> > > > Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
> > > > ---
> > > >  server/event-loop.c | 58 +++++++++++++++++++++++++++++++++++++++++++++
> > > >  server/red-common.h |  1 +
> > > >  server/reds.c       | 54 -----------------------------------------
> > > >  3 files changed, 59 insertions(+), 54 deletions(-)
> > > > 
> > > > diff --git a/server/event-loop.c b/server/event-loop.c
> > > > index 812c3a53b..1ccfd671f 100644
> > > > --- a/server/event-loop.c
> > > > +++ b/server/event-loop.c
> > > > @@ -264,3 +264,61 @@ const SpiceCoreInterfaceInternal event_loop_core =
> > > > {
> > > >      .watch_update_mask = watch_update_mask,
> > > >      .watch_remove = watch_remove,
> > > >  };
> > > > +
> > > > +/*
> > > > + * Adapter for SpiceCodeInterface
> > > > + */
> > > > +
> > > > +static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal
> > > > *iface, SpiceTimerFunc func, void *opaque)
> > > > +{
> > > > +    return iface->public_interface->timer_add(func, opaque);
> > > > +}
> > > > +
> > > > +static void adapter_timer_start(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > SpiceTimer *timer, uint32_t ms)
> > > > +{
> > > > +    iface->public_interface->timer_start(timer, ms);
> > > > +}
> > > > +
> > > > +static void adapter_timer_cancel(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > SpiceTimer *timer)
> > > > +{
> > > > +    iface->public_interface->timer_cancel(timer);
> > > > +}
> > > > +
> > > > +static void adapter_timer_remove(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > SpiceTimer *timer)
> > > > +{
> > > > +    iface->public_interface->timer_remove(timer);
> > > > +}
> > > > +
> > > > +static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > +                                     int fd, int event_mask,
> > > > SpiceWatchFunc
> > > > func, void *opaque)
> > > > +{
> > > > +    // note: Qemu API is fine having a SOCKET on Windows
> > > > +    return iface->public_interface->watch_add(fd, event_mask, func,
> > > > opaque);
> > > > +}
> > > > +
> > > > +static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal
> > > > *iface, SpiceWatch *watch, int event_mask)
> > > > +{
> > > > +    iface->public_interface->watch_update_mask(watch, event_mask);
> > > > +}
> > > > +
> > > > +static void adapter_watch_remove(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > SpiceWatch *watch)
> > > > +{
> > > > +    iface->public_interface->watch_remove(watch);
> > > > +}
> > > > +
> > > > +static void adapter_channel_event(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > int event, SpiceChannelEventInfo *info)
> > > > +{
> > > > +    if (iface->public_interface->base.minor_version >= 3 &&
> > > > iface->public_interface->channel_event != NULL)
> > > > +        iface->public_interface->channel_event(event, info);
> > > > +}
> > > > +
> > > > +const SpiceCoreInterfaceInternal core_interface_adapter = {
> > > > +    .timer_add = adapter_timer_add,
> > > > +    .timer_start = adapter_timer_start,
> > > > +    .timer_cancel = adapter_timer_cancel,
> > > > +    .timer_remove = adapter_timer_remove,
> > > > +    .watch_add = adapter_watch_add,
> > > > +    .watch_update_mask = adapter_watch_update_mask,
> > > > +    .watch_remove = adapter_watch_remove,
> > > > +    .channel_event = adapter_channel_event,
> > > > +};
> > > > diff --git a/server/red-common.h b/server/red-common.h
> > > > index 223f28690..22ea8fc37 100644
> > > > --- a/server/red-common.h
> > > > +++ b/server/red-common.h
> > > > @@ -71,6 +71,7 @@ struct SpiceCoreInterfaceInternal {
> > > >  };
> > > >  
> > > >  extern const SpiceCoreInterfaceInternal event_loop_core;
> > > > +extern const SpiceCoreInterfaceInternal core_interface_adapter;
> > > >  
> > > >  typedef struct RedsState RedsState;
> > > >  
> > > > diff --git a/server/reds.c b/server/reds.c
> > > > index a3795ab90..f432f55a4 100644
> > > > --- a/server/reds.c
> > > > +++ b/server/reds.c
> > > > @@ -83,60 +83,6 @@ static void reds_client_monitors_config(RedsState
> > > > *reds,
> > > > VDAgentMonitorsConfig *
> > > >  static gboolean reds_use_client_monitors_config(RedsState *reds);
> > > >  static void reds_set_video_codecs(RedsState *reds, GArray
> > > >  *video_codecs);
> > > >  
> > > > -static SpiceTimer *adapter_timer_add(const SpiceCoreInterfaceInternal
> > > > *iface, SpiceTimerFunc func, void *opaque)
> > > > -{
> > > > -    return iface->public_interface->timer_add(func, opaque);
> > > > -}
> > > > -
> > > > -static void adapter_timer_start(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > SpiceTimer *timer, uint32_t ms)
> > > > -{
> > > > -    iface->public_interface->timer_start(timer, ms);
> > > > -}
> > > > -
> > > > -static void adapter_timer_cancel(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > SpiceTimer *timer)
> > > > -{
> > > > -    iface->public_interface->timer_cancel(timer);
> > > > -}
> > > > -
> > > > -static void adapter_timer_remove(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > SpiceTimer *timer)
> > > > -{
> > > > -    iface->public_interface->timer_remove(timer);
> > > > -}
> > > > -
> > > > -static SpiceWatch *adapter_watch_add(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > -                                     int fd, int event_mask,
> > > > SpiceWatchFunc
> > > > func, void *opaque)
> > > > -{
> > > > -    // note: Qemu API is fine having a SOCKET on Windows
> > > > -    return iface->public_interface->watch_add(fd, event_mask, func,
> > > > opaque);
> > > > -}
> > > > -
> > > > -static void adapter_watch_update_mask(const SpiceCoreInterfaceInternal
> > > > *iface, SpiceWatch *watch, int event_mask)
> > > > -{
> > > > -    iface->public_interface->watch_update_mask(watch, event_mask);
> > > > -}
> > > > -
> > > > -static void adapter_watch_remove(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > SpiceWatch *watch)
> > > > -{
> > > > -    iface->public_interface->watch_remove(watch);
> > > > -}
> > > > -
> > > > -static void adapter_channel_event(const SpiceCoreInterfaceInternal
> > > > *iface,
> > > > int event, SpiceChannelEventInfo *info)
> > > > -{
> > > > -    if (iface->public_interface->base.minor_version >= 3 &&
> > > > iface->public_interface->channel_event != NULL)
> > > > -        iface->public_interface->channel_event(event, info);
> > > > -}
> > > > -
> > > > -static const SpiceCoreInterfaceInternal core_interface_adapter = {
> > > > -    .timer_add = adapter_timer_add,
> > > > -    .timer_start = adapter_timer_start,
> > > > -    .timer_cancel = adapter_timer_cancel,
> > > > -    .timer_remove = adapter_timer_remove,
> > > > -    .watch_add = adapter_watch_add,
> > > > -    .watch_update_mask = adapter_watch_update_mask,
> > > > -    .watch_remove = adapter_watch_remove,
> > > > -    .channel_event = adapter_channel_event,
> > > > -};
> > > > -
> > > >  /* Debugging only variable: allow multiple client connections to the
> > > >  spice
> > > >   * server */
> > > >  #define SPICE_DEBUG_ALLOW_MC_ENV "SPICE_DEBUG_ALLOW_MC"
> _______________________________________________
> Spice-devel mailing list
> Spice-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/spice-devel
ping

> 
> ping
> 
> > 
> > ping
> > 
> > > 
> > > ping
> > > 
> > > > 
> > > > ping the series
> > > > 
> > > > > 
> > > > > Put more event loop code in event-loop.c.
> > > > > This is a preparation patch for the next one.
> > > > > 
> > > > > Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
> > > > > ---
> > > > >  server/event-loop.c | 58
> > > > >  +++++++++++++++++++++++++++++++++++++++++++++
> > > > >  server/red-common.h |  1 +
> > > > >  server/reds.c       | 54 -----------------------------------------
> > > > >  3 files changed, 59 insertions(+), 54 deletions(-)
> > > > > 
> > > > > diff --git a/server/event-loop.c b/server/event-loop.c
> > > > > index 812c3a53b..1ccfd671f 100644
> > > > > --- a/server/event-loop.c
> > > > > +++ b/server/event-loop.c
> > > > > @@ -264,3 +264,61 @@ const SpiceCoreInterfaceInternal event_loop_core
> > > > > =
> > > > > {
> > > > >      .watch_update_mask = watch_update_mask,
> > > > >      .watch_remove = watch_remove,
> > > > >  };
> > > > > +
> > > > > +/*
> > > > > + * Adapter for SpiceCodeInterface
> > > > > + */
> > > > > +
> > > > > +static SpiceTimer *adapter_timer_add(const
> > > > > SpiceCoreInterfaceInternal
> > > > > *iface, SpiceTimerFunc func, void *opaque)
> > > > > +{
> > > > > +    return iface->public_interface->timer_add(func, opaque);
> > > > > +}
> > > > > +
> > > > > +static void adapter_timer_start(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > SpiceTimer *timer, uint32_t ms)
> > > > > +{
> > > > > +    iface->public_interface->timer_start(timer, ms);
> > > > > +}
> > > > > +
> > > > > +static void adapter_timer_cancel(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > SpiceTimer *timer)
> > > > > +{
> > > > > +    iface->public_interface->timer_cancel(timer);
> > > > > +}
> > > > > +
> > > > > +static void adapter_timer_remove(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > SpiceTimer *timer)
> > > > > +{
> > > > > +    iface->public_interface->timer_remove(timer);
> > > > > +}
> > > > > +
> > > > > +static SpiceWatch *adapter_watch_add(const
> > > > > SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > +                                     int fd, int event_mask,
> > > > > SpiceWatchFunc
> > > > > func, void *opaque)
> > > > > +{
> > > > > +    // note: Qemu API is fine having a SOCKET on Windows
> > > > > +    return iface->public_interface->watch_add(fd, event_mask, func,
> > > > > opaque);
> > > > > +}
> > > > > +
> > > > > +static void adapter_watch_update_mask(const
> > > > > SpiceCoreInterfaceInternal
> > > > > *iface, SpiceWatch *watch, int event_mask)
> > > > > +{
> > > > > +    iface->public_interface->watch_update_mask(watch, event_mask);
> > > > > +}
> > > > > +
> > > > > +static void adapter_watch_remove(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > SpiceWatch *watch)
> > > > > +{
> > > > > +    iface->public_interface->watch_remove(watch);
> > > > > +}
> > > > > +
> > > > > +static void adapter_channel_event(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > int event, SpiceChannelEventInfo *info)
> > > > > +{
> > > > > +    if (iface->public_interface->base.minor_version >= 3 &&
> > > > > iface->public_interface->channel_event != NULL)
> > > > > +        iface->public_interface->channel_event(event, info);
> > > > > +}
> > > > > +
> > > > > +const SpiceCoreInterfaceInternal core_interface_adapter = {
> > > > > +    .timer_add = adapter_timer_add,
> > > > > +    .timer_start = adapter_timer_start,
> > > > > +    .timer_cancel = adapter_timer_cancel,
> > > > > +    .timer_remove = adapter_timer_remove,
> > > > > +    .watch_add = adapter_watch_add,
> > > > > +    .watch_update_mask = adapter_watch_update_mask,
> > > > > +    .watch_remove = adapter_watch_remove,
> > > > > +    .channel_event = adapter_channel_event,
> > > > > +};
> > > > > diff --git a/server/red-common.h b/server/red-common.h
> > > > > index 223f28690..22ea8fc37 100644
> > > > > --- a/server/red-common.h
> > > > > +++ b/server/red-common.h
> > > > > @@ -71,6 +71,7 @@ struct SpiceCoreInterfaceInternal {
> > > > >  };
> > > > >  
> > > > >  extern const SpiceCoreInterfaceInternal event_loop_core;
> > > > > +extern const SpiceCoreInterfaceInternal core_interface_adapter;
> > > > >  
> > > > >  typedef struct RedsState RedsState;
> > > > >  
> > > > > diff --git a/server/reds.c b/server/reds.c
> > > > > index a3795ab90..f432f55a4 100644
> > > > > --- a/server/reds.c
> > > > > +++ b/server/reds.c
> > > > > @@ -83,60 +83,6 @@ static void reds_client_monitors_config(RedsState
> > > > > *reds,
> > > > > VDAgentMonitorsConfig *
> > > > >  static gboolean reds_use_client_monitors_config(RedsState *reds);
> > > > >  static void reds_set_video_codecs(RedsState *reds, GArray
> > > > >  *video_codecs);
> > > > >  
> > > > > -static SpiceTimer *adapter_timer_add(const
> > > > > SpiceCoreInterfaceInternal
> > > > > *iface, SpiceTimerFunc func, void *opaque)
> > > > > -{
> > > > > -    return iface->public_interface->timer_add(func, opaque);
> > > > > -}
> > > > > -
> > > > > -static void adapter_timer_start(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > SpiceTimer *timer, uint32_t ms)
> > > > > -{
> > > > > -    iface->public_interface->timer_start(timer, ms);
> > > > > -}
> > > > > -
> > > > > -static void adapter_timer_cancel(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > SpiceTimer *timer)
> > > > > -{
> > > > > -    iface->public_interface->timer_cancel(timer);
> > > > > -}
> > > > > -
> > > > > -static void adapter_timer_remove(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > SpiceTimer *timer)
> > > > > -{
> > > > > -    iface->public_interface->timer_remove(timer);
> > > > > -}
> > > > > -
> > > > > -static SpiceWatch *adapter_watch_add(const
> > > > > SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > -                                     int fd, int event_mask,
> > > > > SpiceWatchFunc
> > > > > func, void *opaque)
> > > > > -{
> > > > > -    // note: Qemu API is fine having a SOCKET on Windows
> > > > > -    return iface->public_interface->watch_add(fd, event_mask, func,
> > > > > opaque);
> > > > > -}
> > > > > -
> > > > > -static void adapter_watch_update_mask(const
> > > > > SpiceCoreInterfaceInternal
> > > > > *iface, SpiceWatch *watch, int event_mask)
> > > > > -{
> > > > > -    iface->public_interface->watch_update_mask(watch, event_mask);
> > > > > -}
> > > > > -
> > > > > -static void adapter_watch_remove(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > SpiceWatch *watch)
> > > > > -{
> > > > > -    iface->public_interface->watch_remove(watch);
> > > > > -}
> > > > > -
> > > > > -static void adapter_channel_event(const SpiceCoreInterfaceInternal
> > > > > *iface,
> > > > > int event, SpiceChannelEventInfo *info)
> > > > > -{
> > > > > -    if (iface->public_interface->base.minor_version >= 3 &&
> > > > > iface->public_interface->channel_event != NULL)
> > > > > -        iface->public_interface->channel_event(event, info);
> > > > > -}
> > > > > -
> > > > > -static const SpiceCoreInterfaceInternal core_interface_adapter = {
> > > > > -    .timer_add = adapter_timer_add,
> > > > > -    .timer_start = adapter_timer_start,
> > > > > -    .timer_cancel = adapter_timer_cancel,
> > > > > -    .timer_remove = adapter_timer_remove,
> > > > > -    .watch_add = adapter_watch_add,
> > > > > -    .watch_update_mask = adapter_watch_update_mask,
> > > > > -    .watch_remove = adapter_watch_remove,
> > > > > -    .channel_event = adapter_channel_event,
> > > > > -};
> > > > > -
> > > > >  /* Debugging only variable: allow multiple client connections to the
> > > > >  spice
> > > > >   * server */
> > > > >  #define SPICE_DEBUG_ALLOW_MC_ENV "SPICE_DEBUG_ALLOW_MC"
ping

> 
> ping
> 
> > 
> > ping
> > 
> > > 
> > > ping
> > > 
> > > > 
> > > > ping
> > > > 
> > > > > 
> > > > > ping the series
> > > > > 
> > > > > > 
> > > > > > Put more event loop code in event-loop.c.
> > > > > > This is a preparation patch for the next one.
> > > > > > 
> > > > > > Signed-off-by: Frediano Ziglio <fziglio@redhat.com>
> > > > > > ---
> > > > > >  server/event-loop.c | 58
> > > > > >  +++++++++++++++++++++++++++++++++++++++++++++
> > > > > >  server/red-common.h |  1 +
> > > > > >  server/reds.c       | 54 -----------------------------------------
> > > > > >  3 files changed, 59 insertions(+), 54 deletions(-)
> > > > > > 
> > > > > > diff --git a/server/event-loop.c b/server/event-loop.c
> > > > > > index 812c3a53b..1ccfd671f 100644
> > > > > > --- a/server/event-loop.c
> > > > > > +++ b/server/event-loop.c
> > > > > > @@ -264,3 +264,61 @@ const SpiceCoreInterfaceInternal
> > > > > > event_loop_core
> > > > > > =
> > > > > > {
> > > > > >      .watch_update_mask = watch_update_mask,
> > > > > >      .watch_remove = watch_remove,
> > > > > >  };
> > > > > > +
> > > > > > +/*
> > > > > > + * Adapter for SpiceCodeInterface
> > > > > > + */
> > > > > > +
> > > > > > +static SpiceTimer *adapter_timer_add(const
> > > > > > SpiceCoreInterfaceInternal
> > > > > > *iface, SpiceTimerFunc func, void *opaque)
> > > > > > +{
> > > > > > +    return iface->public_interface->timer_add(func, opaque);
> > > > > > +}
> > > > > > +
> > > > > > +static void adapter_timer_start(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > SpiceTimer *timer, uint32_t ms)
> > > > > > +{
> > > > > > +    iface->public_interface->timer_start(timer, ms);
> > > > > > +}
> > > > > > +
> > > > > > +static void adapter_timer_cancel(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > SpiceTimer *timer)
> > > > > > +{
> > > > > > +    iface->public_interface->timer_cancel(timer);
> > > > > > +}
> > > > > > +
> > > > > > +static void adapter_timer_remove(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > SpiceTimer *timer)
> > > > > > +{
> > > > > > +    iface->public_interface->timer_remove(timer);
> > > > > > +}
> > > > > > +
> > > > > > +static SpiceWatch *adapter_watch_add(const
> > > > > > SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > +                                     int fd, int event_mask,
> > > > > > SpiceWatchFunc
> > > > > > func, void *opaque)
> > > > > > +{
> > > > > > +    // note: Qemu API is fine having a SOCKET on Windows
> > > > > > +    return iface->public_interface->watch_add(fd, event_mask,
> > > > > > func,
> > > > > > opaque);
> > > > > > +}
> > > > > > +
> > > > > > +static void adapter_watch_update_mask(const
> > > > > > SpiceCoreInterfaceInternal
> > > > > > *iface, SpiceWatch *watch, int event_mask)
> > > > > > +{
> > > > > > +    iface->public_interface->watch_update_mask(watch, event_mask);
> > > > > > +}
> > > > > > +
> > > > > > +static void adapter_watch_remove(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > SpiceWatch *watch)
> > > > > > +{
> > > > > > +    iface->public_interface->watch_remove(watch);
> > > > > > +}
> > > > > > +
> > > > > > +static void adapter_channel_event(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > int event, SpiceChannelEventInfo *info)
> > > > > > +{
> > > > > > +    if (iface->public_interface->base.minor_version >= 3 &&
> > > > > > iface->public_interface->channel_event != NULL)
> > > > > > +        iface->public_interface->channel_event(event, info);
> > > > > > +}
> > > > > > +
> > > > > > +const SpiceCoreInterfaceInternal core_interface_adapter = {
> > > > > > +    .timer_add = adapter_timer_add,
> > > > > > +    .timer_start = adapter_timer_start,
> > > > > > +    .timer_cancel = adapter_timer_cancel,
> > > > > > +    .timer_remove = adapter_timer_remove,
> > > > > > +    .watch_add = adapter_watch_add,
> > > > > > +    .watch_update_mask = adapter_watch_update_mask,
> > > > > > +    .watch_remove = adapter_watch_remove,
> > > > > > +    .channel_event = adapter_channel_event,
> > > > > > +};
> > > > > > diff --git a/server/red-common.h b/server/red-common.h
> > > > > > index 223f28690..22ea8fc37 100644
> > > > > > --- a/server/red-common.h
> > > > > > +++ b/server/red-common.h
> > > > > > @@ -71,6 +71,7 @@ struct SpiceCoreInterfaceInternal {
> > > > > >  };
> > > > > >  
> > > > > >  extern const SpiceCoreInterfaceInternal event_loop_core;
> > > > > > +extern const SpiceCoreInterfaceInternal core_interface_adapter;
> > > > > >  
> > > > > >  typedef struct RedsState RedsState;
> > > > > >  
> > > > > > diff --git a/server/reds.c b/server/reds.c
> > > > > > index a3795ab90..f432f55a4 100644
> > > > > > --- a/server/reds.c
> > > > > > +++ b/server/reds.c
> > > > > > @@ -83,60 +83,6 @@ static void
> > > > > > reds_client_monitors_config(RedsState
> > > > > > *reds,
> > > > > > VDAgentMonitorsConfig *
> > > > > >  static gboolean reds_use_client_monitors_config(RedsState *reds);
> > > > > >  static void reds_set_video_codecs(RedsState *reds, GArray
> > > > > >  *video_codecs);
> > > > > >  
> > > > > > -static SpiceTimer *adapter_timer_add(const
> > > > > > SpiceCoreInterfaceInternal
> > > > > > *iface, SpiceTimerFunc func, void *opaque)
> > > > > > -{
> > > > > > -    return iface->public_interface->timer_add(func, opaque);
> > > > > > -}
> > > > > > -
> > > > > > -static void adapter_timer_start(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > SpiceTimer *timer, uint32_t ms)
> > > > > > -{
> > > > > > -    iface->public_interface->timer_start(timer, ms);
> > > > > > -}
> > > > > > -
> > > > > > -static void adapter_timer_cancel(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > SpiceTimer *timer)
> > > > > > -{
> > > > > > -    iface->public_interface->timer_cancel(timer);
> > > > > > -}
> > > > > > -
> > > > > > -static void adapter_timer_remove(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > SpiceTimer *timer)
> > > > > > -{
> > > > > > -    iface->public_interface->timer_remove(timer);
> > > > > > -}
> > > > > > -
> > > > > > -static SpiceWatch *adapter_watch_add(const
> > > > > > SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > -                                     int fd, int event_mask,
> > > > > > SpiceWatchFunc
> > > > > > func, void *opaque)
> > > > > > -{
> > > > > > -    // note: Qemu API is fine having a SOCKET on Windows
> > > > > > -    return iface->public_interface->watch_add(fd, event_mask,
> > > > > > func,
> > > > > > opaque);
> > > > > > -}
> > > > > > -
> > > > > > -static void adapter_watch_update_mask(const
> > > > > > SpiceCoreInterfaceInternal
> > > > > > *iface, SpiceWatch *watch, int event_mask)
> > > > > > -{
> > > > > > -    iface->public_interface->watch_update_mask(watch, event_mask);
> > > > > > -}
> > > > > > -
> > > > > > -static void adapter_watch_remove(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > SpiceWatch *watch)
> > > > > > -{
> > > > > > -    iface->public_interface->watch_remove(watch);
> > > > > > -}
> > > > > > -
> > > > > > -static void adapter_channel_event(const SpiceCoreInterfaceInternal
> > > > > > *iface,
> > > > > > int event, SpiceChannelEventInfo *info)
> > > > > > -{
> > > > > > -    if (iface->public_interface->base.minor_version >= 3 &&
> > > > > > iface->public_interface->channel_event != NULL)
> > > > > > -        iface->public_interface->channel_event(event, info);
> > > > > > -}
> > > > > > -
> > > > > > -static const SpiceCoreInterfaceInternal core_interface_adapter = {
> > > > > > -    .timer_add = adapter_timer_add,
> > > > > > -    .timer_start = adapter_timer_start,
> > > > > > -    .timer_cancel = adapter_timer_cancel,
> > > > > > -    .timer_remove = adapter_timer_remove,
> > > > > > -    .watch_add = adapter_watch_add,
> > > > > > -    .watch_update_mask = adapter_watch_update_mask,
> > > > > > -    .watch_remove = adapter_watch_remove,
> > > > > > -    .channel_event = adapter_channel_event,
> > > > > > -};
> > > > > > -
> > > > > >  /* Debugging only variable: allow multiple client connections to
> > > > > >  the
> > > > > >  spice
> > > > > >   * server */
> > > > > >  #define SPICE_DEBUG_ALLOW_MC_ENV "SPICE_DEBUG_ALLOW_MC"