[Spice-devel] [PATCH 10/19] Introduce reds_core_timer_*

Frediano Ziglio fziglio at redhat.com
Fri Feb 19 12:52:29 UTC 2016


> 
> > 
> > From: Christophe Fergeau <cfergeau at redhat.com>
> > 
> > ---
> >  server/reds.c | 43 +++++++++++++++++++++++++++++++++++++++++++
> >  server/reds.h | 11 +++++++++++
> >  2 files changed, 54 insertions(+)
> > 
> > diff --git a/server/reds.c b/server/reds.c
> > index 7006420..51092eb 100644
> > --- a/server/reds.c
> > +++ b/server/reds.c
> > @@ -4084,6 +4084,49 @@ void reds_core_watch_remove(RedsState *reds,
> > SpiceWatch *watch)
> >     reds->core->watch_remove(watch);
> >  }
> >  
> > +SpiceTimer *reds_core_timer_add(RedsState *reds,
> > +                                SpiceTimerFunc func,
> > +                                void *opaque)
> > +{
> > +   g_return_val_if_fail(reds != NULL, NULL);
> > +   g_return_val_if_fail(reds->core != NULL, NULL);
> > +   g_return_val_if_fail(reds->core->timer_add != NULL, NULL);
> > +
> > +   return reds->core->timer_add(reds->core, func, opaque);
> > +
> > +}
> > +
> > +void reds_core_timer_start(RedsState *reds,
> > +                           SpiceTimer *timer,
> > +                           uint32_t ms)
> > +{
> > +   g_return_if_fail(reds != NULL);
> > +   g_return_if_fail(reds->core != NULL);
> > +   g_return_if_fail(reds->core->timer_start != NULL);
> > +
> > +   return reds->core->timer_start(timer, ms);
> > +}
> > +
> > +void reds_core_timer_cancel(RedsState *reds,
> > +                            SpiceTimer *timer)
> > +{
> > +   g_return_if_fail(reds != NULL);
> > +   g_return_if_fail(reds->core != NULL);
> > +   g_return_if_fail(reds->core->timer_cancel != NULL);
> > +
> > +   return reds->core->timer_cancel(timer);
> > +}
> > +
> > +void reds_core_timer_remove(RedsState *reds,
> > +                            SpiceTimer *timer)
> > +{
> > +   g_return_if_fail(reds != NULL);
> > +   g_return_if_fail(reds->core != NULL);
> > +   g_return_if_fail(reds->core->timer_remove != NULL);
> > +
> > +   return reds->core->timer_remove(timer);
> > +}
> > +
> >  void reds_update_client_mouse_allowed(RedsState *reds)
> >  {
> >      static int allowed = FALSE;
> > diff --git a/server/reds.h b/server/reds.h
> > index 6dd0c81..174f48a 100644
> > --- a/server/reds.h
> > +++ b/server/reds.h
> > @@ -127,4 +127,15 @@ void reds_core_watch_update_mask(RedsState *reds,
> >                                   int event_mask);
> >  void reds_core_watch_remove(RedsState *reds, SpiceWatch *watch);
> >  
> > +SpiceTimer *reds_core_timer_add(RedsState *reds,
> > +                                SpiceTimerFunc func,
> > +                                void *opaque);
> 
> I think would be really lovely if compiler could detect that
> there is a mismatch between the opaque pointer and the
> pointer the func function is expecting (I know how to do
> this in C++, not really sure about C...).
> 

Wow:


diff --git a/server/reds.h b/server/reds.h
index 174f48a..dc649b7 100644
--- a/server/reds.h
+++ b/server/reds.h
@@ -127,9 +127,12 @@ void reds_core_watch_update_mask(RedsState *reds,
                                  int event_mask);
 void reds_core_watch_remove(RedsState *reds, SpiceWatch *watch);
 
-SpiceTimer *reds_core_timer_add(RedsState *reds,
+SpiceTimer *reds_core_timer_add_(RedsState *reds,
                                 SpiceTimerFunc func,
                                 void *opaque);
+#define reds_core_timer_add(r,f,o) ({ \
+    void (*_func)(typeof(o) _o) = (f); \
+    reds_core_timer_add_((r), (SpiceTimerFunc)_func, (o)); })
 void reds_core_timer_start(RedsState *reds,
                            SpiceTimer *timer,
                            uint32_t ms);


I already found a bug in our code :(

Frediano

> > +void reds_core_timer_start(RedsState *reds,
> > +                           SpiceTimer *timer,
> > +                           uint32_t ms);
> > +void reds_core_timer_cancel(RedsState *reds,
> > +                            SpiceTimer *timer);
> > +void reds_core_timer_remove(RedsState *reds,
> > +                            SpiceTimer *timer);
> > +
> >  #endif
> 



More information about the Spice-devel mailing list