[Spice-devel] [PATCH spice-server v2 2/3] Dispatcher: typedef enum for dispatcher flags

Jonathon Jongsma jjongsma at redhat.com
Wed Sep 6 17:03:46 UTC 2017


On Wed, 2017-09-06 at 12:35 -0400, Frediano Ziglio wrote:
> > 
> > On Wed, 2017-09-06 at 07:47 -0400, Frediano Ziglio wrote:
> > > > 
> > > > dispatcher_register_handler() accepts a flag value that
> > > > determines
> > > > whether the message type requires an ACK or async_done handler.
> > > > This
> > > > parameter was previously just an int. It is now a typedef'ed
> > > > enum:
> > > > DispatcherFlag. The enum values were accordingly renamed:
> > > > 
> > > >   DISPATCHER_* -> DISPATCHER_FLAG_*
> > > > 
> > > > Signed-off-by: Jonathon Jongsma <jjongsma at redhat.com>
> > > 
> > > I honestly much prefer the "ack" field name instead of the
> > > "flag".
> > > "flag" is too generic.
> > > 
> > > Maybe when I see ACK I think at TCP and I understand what it
> > > means. Why not instead using this enumeration?
> > > 
> > > typedef enum {
> > >     DISPATCHER_ACK_NONE = 0,
> > >     DISPATCHER_ACK_SYNC,
> > >     DISPATCHER_ACK_ASYNC
> > > } DispatcherAck;
> > > 
> > > and
> > > 
> > > DispatcherAck ack;
> > > 
> > > (or ack_type)
> > 
> > 
> > Yeah, I thought about that. But I felt like the async_done thing
> > was a
> > bit different than an 'ACK'. It allows you to call a function after
> > the
> > message has been handled. But it doesn't really place any
> > restrictions
> > on what that function does. In our case, it ends up calling the
> > QXLInterface::async_complete() function, which might update some
> 
> This does not make sense if you are documenting just the Dispatcher,
> what the caller does with the acknowledge is not related,
> this interface just give the opportunity to the user to implement
> any kind of completion. But the implementation yes, does not
> allow the same method for acknowledge which is quite different.
> 
> > internal state and trigger an interrupt or something. But that
> > seemed
> > like a bit of a broader concept than an 'ACK' to me. It's more like
> > an
> > async callback.
> > 
> > I'm not sure that I'm totally happy with the 'flag' terminology
> > either,
> >  but at the time I thought it was better than ACK. But I don't feel
> > too
> > strongly.
> > 
> 
> Maybe we could use a long "complete_action".. so 
> 
> typedef enum {
>     DISPATCHER_COMPLETE_ACTION_NONE = 0,
>     DISPATCHER_COMPLETE_ACTION_SEND_ACK,
>     DISPATCHER_COMPLETE_ACTION_ASYNC_CALL
> } DispatcherCompleteAction;
> 
> and
> 
> DispatcherCompleteAction complete_action;
> 
> I know... it's long, but "flag" is way too much generic.


Hmm, it feels a bit unwieldy to me. What about something like

typedef enum {
DISPATCHER_RESPONSE_TYPE_NONE = 0,
DISPATCHER_RESPONSE_TYPE_ACK,
DISPATCHER_RESPONSE_TYPE_ASYNC_CALL
} DispatcherResponseType

Or shorter: DISPATCHER_RESPONSE_* instead of DISPATCHER_RESPONSE_TYPE_*

[OT: it's a little bit unclear to me why the async_done handler is
necessary at all. It is called immediately after the message-specific
handler is called, and it is called from the same thread. So anything
that is done in the async_done callback could just as easily be done in
the message-specific handler, no? I suppose it allows you to reduce
code duplication slightly, but that seems to be the only advantage. If
this async_done feature did not exist, we could simply use a boolean
argument for whether to send an ACK or not, and the enum would be
unnecessary. But maybe I'm missing something.]


> 
> > Jonathon
> > 
> > 
> > > 
> > > Frediano
> > > 
> > > 
> > > > ---
> > > >  server/dispatcher.c | 12 ++++-----
> > > >  server/dispatcher.h | 20 +++++++--------
> > > >  server/red-worker.c | 74
> > > >  ++++++++++++++++++++++++++---------------------------
> > > >  3 files changed, 53 insertions(+), 53 deletions(-)
> > > > 
> > > > diff --git a/server/dispatcher.c b/server/dispatcher.c
> > > > index 6f2c4d85e..76f5eeaf4 100644
> > > > --- a/server/dispatcher.c
> > > > +++ b/server/dispatcher.c
> > > > @@ -40,7 +40,7 @@ static void setup_dummy_signal_handler(void);
> > > >  
> > > >  typedef struct DispatcherMessage {
> > > >      size_t size;
> > > > -    int ack;
> > > > +    DispatcherFlag flag;
> > > >      dispatcher_handle_message handler;
> > > >  } DispatcherMessage;
> > > >  
> > > > @@ -303,13 +303,13 @@ static int
> > > > dispatcher_handle_single_read(Dispatcher
> > > > *dispatcher)
> > > >      } else {
> > > >          spice_printerr("error: no handler for message type
> > > > %d",
> > > > type);
> > > >      }
> > > > -    if (msg->ack == DISPATCHER_ACK) {
> > > > +    if (msg->flag == DISPATCHER_FLAG_ACK) {
> > > >          if (write_safe(dispatcher->priv->recv_fd,
> > > >                         (uint8_t*)&ack, sizeof(ack)) == -1) {
> > > >              spice_printerr("error writing ack for message %d",
> > > > type);
> > > >              /* TODO: close socketpair? */
> > > >          }
> > > > -    } else if (msg->ack == DISPATCHER_ASYNC &&
> > > > dispatcher->priv->handle_async_done) {
> > > > +    } else if (msg->flag == DISPATCHER_FLAG_ASYNC &&
> > > > dispatcher->priv->handle_async_done) {
> > > >          dispatcher->priv->handle_async_done(dispatcher->priv-
> > > > > opaque, type,
> > > > 
> > > >          payload);
> > > >      }
> > > >      return 1;
> > > > @@ -346,7 +346,7 @@ void dispatcher_send_message(Dispatcher
> > > > *dispatcher,
> > > > uint32_t message_type,
> > > >                     message_type);
> > > >          goto unlock;
> > > >      }
> > > > -    if (msg->ack == DISPATCHER_ACK) {
> > > > +    if (msg->flag == DISPATCHER_FLAG_ACK) {
> > > >          if (read_safe(send_fd, (uint8_t*)&ack, sizeof(ack), 1)
> > > > ==
> > > > -1) {
> > > >              spice_printerr("error: failed to read ack");
> > > >          } else if (ack != ACK) {
> > > > @@ -369,7 +369,7 @@ void
> > > > dispatcher_register_async_done_callback(
> > > >  
> > > >  void dispatcher_register_handler(Dispatcher *dispatcher,
> > > > uint32_t
> > > >  message_type,
> > > >                                   dispatcher_handle_message
> > > > handler,
> > > > -                                 size_t size, int ack)
> > > > +                                 size_t size, DispatcherFlag
> > > > flag)
> > > >  {
> > > >      DispatcherMessage *msg;
> > > >  
> > > > @@ -378,7 +378,7 @@ void dispatcher_register_handler(Dispatcher
> > > > *dispatcher,
> > > > uint32_t message_type,
> > > >      msg = &dispatcher->priv->messages[message_type];
> > > >      msg->handler = handler;
> > > >      msg->size = size;
> > > > -    msg->ack = ack;
> > > > +    msg->flag = flag;
> > > >      if (msg->size > dispatcher->priv->payload_size) {
> > > >          dispatcher->priv->payload = realloc(dispatcher->priv-
> > > > > payload,
> > > > 
> > > >          msg->size);
> > > >          dispatcher->priv->payload_size = msg->size;
> > > > diff --git a/server/dispatcher.h b/server/dispatcher.h
> > > > index 97b01de9c..862fc46b9 100644
> > > > --- a/server/dispatcher.h
> > > > +++ b/server/dispatcher.h
> > > > @@ -72,11 +72,11 @@ typedef void
> > > > (*dispatcher_handle_async_done)(void
> > > > *opaque,
> > > >  void dispatcher_send_message(Dispatcher *dispatcher, uint32_t
> > > > message_type,
> > > >                               void *payload);
> > > >  
> > > > -enum {
> > > > -    DISPATCHER_NONE = 0,
> > > > -    DISPATCHER_ACK,
> > > > -    DISPATCHER_ASYNC
> > > > -};
> > > > +typedef enum {
> > > > +    DISPATCHER_FLAG_NONE = 0,
> > > > +    DISPATCHER_FLAG_ACK,
> > > > +    DISPATCHER_FLAG_ASYNC
> > > > +} DispatcherFlag;
> > > >  
> > > >  /*
> > > >   * dispatcher_register_handler
> > > > @@ -84,16 +84,16 @@ enum {
> > > >   * @messsage_type:  message type
> > > >   * @handler:        message handler
> > > >   * @size:           message size. Each type has a fixed
> > > > associated
> > > > size.
> > > > - * @ack:            One of DISPATCHER_NONE, DISPATCHER_ACK,
> > > > DISPATCHER_ASYNC.
> > > > - *                  DISPATCHER_NONE - only send the message
> > > > - *                  DISPATCHER_ACK - send an ack after the
> > > > message
> > > > - *                  DISPATCHER_ASYNC - call send an ack. This
> > > > is
> > > > per message
> > > > type - you can't send the
> > > > + * @flag:            One of DISPATCHER_FLAG_NONE,
> > > > DISPATCHER_FLAG_ACK,
> > > > DISPATCHER_FLAG_ASYNC.
> > > > + *                  DISPATCHER_FLAG_NONE - only send the
> > > > message
> > > > + *                  DISPATCHER_FLAG_ACK - send an ack after
> > > > the
> > > > message
> > > > + *                  DISPATCHER_FLAG_ASYNC - call send an ack.
> > > > This
> > > > is per
> > > > message type - you can't send the
> > > >   *                  same message type with and without.
> > > > Register
> > > > two
> > > >   different
> > > >   *                  messages if that is what you want.
> > > >   */
> > > >  void dispatcher_register_handler(Dispatcher *dispatcher,
> > > > uint32_t
> > > >  message_type,
> > > >                                   dispatcher_handle_message
> > > > handler, size_t
> > > >                                   size,
> > > > -                                 int ack);
> > > > +                                 DispatcherFlag flag);
> > > >  
> > > >  /*
> > > >   * dispatcher_register_async_done_callback
> > > > diff --git a/server/red-worker.c b/server/red-worker.c
> > > > index 4d8566be7..c3f2dbfa0 100644
> > > > --- a/server/red-worker.c
> > > > +++ b/server/red-worker.c
> > > > @@ -1024,187 +1024,187 @@ static void
> > > > register_callbacks(Dispatcher
> > > > *dispatcher)
> > > >                                  RED_WORKER_MESSAGE_DISPLAY_CON
> > > > NECT
> > > > ,
> > > >                                  handle_dev_display_connect,
> > > >                                  sizeof(RedWorkerMessageDisplay
> > > > Conn
> > > > ect),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DISPLAY_DIS
> > > > CONN
> > > > ECT,
> > > >                                  handle_dev_display_disconnect,
> > > >                                  sizeof(RedWorkerMessageDisplay
> > > > Disc
> > > > onnect),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DISPLAY_MIG
> > > > RATE
> > > > ,
> > > >                                  handle_dev_display_migrate,
> > > >                                  sizeof(RedWorkerMessageDisplay
> > > > Migr
> > > > ate),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_CURSOR_CONN
> > > > ECT,
> > > >                                  handle_dev_cursor_connect,
> > > >                                  sizeof(RedWorkerMessageCursorC
> > > > onne
> > > > ct),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_CURSOR_DISC
> > > > ONNE
> > > > CT,
> > > >                                  handle_dev_cursor_disconnect,
> > > >                                  sizeof(RedWorkerMessageCursorD
> > > > isco
> > > > nnect),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_CURSOR_MIGR
> > > > ATE,
> > > >                                  handle_dev_cursor_migrate,
> > > >                                  sizeof(RedWorkerMessageCursorM
> > > > igra
> > > > te),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_UPDATE,
> > > >                                  handle_dev_update,
> > > >                                  sizeof(RedWorkerMessageUpdate)
> > > > ,
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_UPDATE_ASYN
> > > > C,
> > > >                                  handle_dev_update_async,
> > > >                                  sizeof(RedWorkerMessageUpdateA
> > > > sync
> > > > ),
> > > > -                                DISPATCHER_ASYNC);
> > > > +                                DISPATCHER_FLAG_ASYNC);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_ADD_MEMSLOT
> > > > ,
> > > >                                  handle_dev_add_memslot,
> > > >                                  sizeof(RedWorkerMessageAddMems
> > > > lot)
> > > > ,
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_ADD_MEMSLOT
> > > > _ASY
> > > > NC,
> > > >                                  handle_dev_add_memslot_async,
> > > >                                  sizeof(RedWorkerMessageAddMems
> > > > lotA
> > > > sync),
> > > > -                                DISPATCHER_ASYNC);
> > > > +                                DISPATCHER_FLAG_ASYNC);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DEL_MEMSLOT
> > > > ,
> > > >                                  handle_dev_del_memslot,
> > > >                                  sizeof(RedWorkerMessageDelMems
> > > > lot)
> > > > ,
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DESTROY_SUR
> > > > FACE
> > > > S,
> > > >                                  handle_dev_destroy_surfaces,
> > > >                                  sizeof(RedWorkerMessageDestroy
> > > > Surf
> > > > aces),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DESTROY_SUR
> > > > FACE
> > > > S_ASYNC,
> > > >                                  handle_dev_destroy_surfaces_as
> > > > ync,
> > > >                                  sizeof(RedWorkerMessageDestroy
> > > > Surf
> > > > acesAsync),
> > > > -                                DISPATCHER_ASYNC);
> > > > +                                DISPATCHER_FLAG_ASYNC);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DESTROY_PRI
> > > > MARY
> > > > _SURFACE,
> > > >                                  handle_dev_destroy_primary_sur
> > > > face
> > > > ,
> > > >                                  sizeof(RedWorkerMessageDestroy
> > > > Prim
> > > > arySurface),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DESTROY_PRI
> > > > MARY
> > > > _SURFACE_ASYNC,
> > > >                                  handle_dev_destroy_primary_sur
> > > > face
> > > > _async,
> > > >                                  sizeof(RedWorkerMessageDestroy
> > > > Prim
> > > > arySurfaceAsync),
> > > > -                                DISPATCHER_ASYNC);
> > > > +                                DISPATCHER_FLAG_ASYNC);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_CREATE_PRIM
> > > > ARY_
> > > > SURFACE_ASYNC,
> > > >                                  handle_dev_create_primary_surf
> > > > ace_
> > > > async,
> > > >                                  sizeof(RedWorkerMessageCreateP
> > > > rima
> > > > rySurfaceAsync),
> > > > -                                DISPATCHER_ASYNC);
> > > > +                                DISPATCHER_FLAG_ASYNC);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_CREATE_PRIM
> > > > ARY_
> > > > SURFACE,
> > > >                                  handle_dev_create_primary_surf
> > > > ace,
> > > >                                  sizeof(RedWorkerMessageCreateP
> > > > rima
> > > > rySurface),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_RESET_IMAGE
> > > > _CAC
> > > > HE,
> > > >                                  handle_dev_reset_image_cache,
> > > >                                  sizeof(RedWorkerMessageResetIm
> > > > ageC
> > > > ache),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_RESET_CURSO
> > > > R,
> > > >                                  handle_dev_reset_cursor,
> > > >                                  sizeof(RedWorkerMessageResetCu
> > > > rsor
> > > > ),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_WAKEUP,
> > > >                                  handle_dev_wakeup,
> > > >                                  sizeof(RedWorkerMessageWakeup)
> > > > ,
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_OOM,
> > > >                                  handle_dev_oom,
> > > >                                  sizeof(RedWorkerMessageOom),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_START,
> > > >                                  handle_dev_start,
> > > >                                  sizeof(RedWorkerMessageStart),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_FLUSH_SURFA
> > > > CES_
> > > > ASYNC,
> > > >                                  handle_dev_flush_surfaces_asyn
> > > > c,
> > > >                                  sizeof(RedWorkerMessageFlushSu
> > > > rfac
> > > > esAsync),
> > > > -                                DISPATCHER_ASYNC);
> > > > +                                DISPATCHER_FLAG_ASYNC);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_STOP,
> > > >                                  handle_dev_stop,
> > > >                                  sizeof(RedWorkerMessageStop),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_LOADVM_COMM
> > > > ANDS
> > > > ,
> > > >                                  handle_dev_loadvm_commands,
> > > >                                  sizeof(RedWorkerMessageLoadvmC
> > > > omma
> > > > nds),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_SET_COMPRES
> > > > SION
> > > > ,
> > > >                                  handle_dev_set_compression,
> > > >                                  sizeof(RedWorkerMessageSetComp
> > > > ress
> > > > ion),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_SET_STREAMI
> > > > NG_V
> > > > IDEO,
> > > >                                  handle_dev_set_streaming_video
> > > > ,
> > > >                                  sizeof(RedWorkerMessageSetStre
> > > > amin
> > > > gVideo),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_SET_VIDEO_C
> > > > ODEC
> > > > S,
> > > >                                  handle_dev_set_video_codecs,
> > > >                                  sizeof(RedWorkerMessageSetVide
> > > > oCod
> > > > ecs),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_SET_MOUSE_M
> > > > ODE,
> > > >                                  handle_dev_set_mouse_mode,
> > > >                                  sizeof(RedWorkerMessageSetMous
> > > > eMod
> > > > e),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DESTROY_SUR
> > > > FACE
> > > > _WAIT,
> > > >                                  handle_dev_destroy_surface_wai
> > > > t,
> > > >                                  sizeof(RedWorkerMessageDestroy
> > > > Surf
> > > > aceWait),
> > > > -                                DISPATCHER_ACK);
> > > > +                                DISPATCHER_FLAG_ACK);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DESTROY_SUR
> > > > FACE
> > > > _WAIT_ASYNC,
> > > >                                  handle_dev_destroy_surface_wai
> > > > t_as
> > > > ync,
> > > >                                  sizeof(RedWorkerMessageDestroy
> > > > Surf
> > > > aceWaitAsync),
> > > > -                                DISPATCHER_ASYNC);
> > > > +                                DISPATCHER_FLAG_ASYNC);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_RESET_MEMSL
> > > > OTS,
> > > >                                  handle_dev_reset_memslots,
> > > >                                  sizeof(RedWorkerMessageResetMe
> > > > mslo
> > > > ts),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_MONITORS_CO
> > > > NFIG
> > > > _ASYNC,
> > > >                                  handle_dev_monitors_config_asy
> > > > nc,
> > > >                                  sizeof(RedWorkerMessageMonitor
> > > > sCon
> > > > figAsync),
> > > > -                                DISPATCHER_ASYNC);
> > > > +                                DISPATCHER_FLAG_ASYNC);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_DRIVER_UNLO
> > > > AD,
> > > >                                  handle_dev_driver_unload,
> > > >                                  sizeof(RedWorkerMessageDriverU
> > > > nloa
> > > > d),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_GL_SCANOUT,
> > > >                                  handle_dev_gl_scanout,
> > > >                                  sizeof(RedWorkerMessageGlScano
> > > > ut),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_GL_DRAW_ASY
> > > > NC,
> > > >                                  handle_dev_gl_draw_async,
> > > >                                  sizeof(RedWorkerMessageGlDraw)
> > > > ,
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >      dispatcher_register_handler(dispatcher,
> > > >                                  RED_WORKER_MESSAGE_CLOSE_WORKE
> > > > R,
> > > >                                  handle_dev_close,
> > > >                                  sizeof(RedWorkerMessageClose),
> > > > -                                DISPATCHER_NONE);
> > > > +                                DISPATCHER_FLAG_NONE);
> > > >  }
> > > >  
> > > >  


More information about the Spice-devel mailing list