> > > On 1 Sep 2017, at 11:36, Frediano Ziglio <fziglio@xxxxxxxxxx> wrote: > > > > RedQxl and RedWorker are quite bound together running > > CursorChannel and DisplayChannel in a separate thread > > marshalling (RedQxl) and unmarshalling and executing > > (RedWorker) requests. > > Make the communication between them private trying > > to maintaining the implementation in these 2 files. > > There is a grammar error. I think you intended something like > “trying to facilitate maintaining”. Then if that’s the case, I’d just write > “trying to facilitate maintaining these two files" > Wouldn't the full sentence be: Make the communication between them private trying to facilitate maintaining these two files. does not sound really good. > > > > > Signed-off-by: Frediano Ziglio <fziglio@xxxxxxxxxx> > > --- > > server/red-qxl.h | 241 > > ---------------------------------------------- > > server/red-replay-qxl.c | 1 + > > server/red-worker.h | 248 > > ++++++++++++++++++++++++++++++++++++++++++++++++ > > 3 files changed, 249 insertions(+), 241 deletions(-) > > > > Maybe messages should be moved in a separate file in order to avoid > > having to include red-worker.h from red-replay-qxl.c ? > > > > diff --git a/server/red-qxl.h b/server/red-qxl.h > > index f925f065..3ac7bf90 100644 > > --- a/server/red-qxl.h > > +++ b/server/red-qxl.h > > @@ -35,8 +35,6 @@ void red_qxl_set_compression_level(QXLInstance *qxl, int > > level); > > void red_qxl_stop(QXLInstance *qxl); > > void red_qxl_start(QXLInstance *qxl); > > uint32_t red_qxl_get_ram_size(QXLInstance *qxl); > > -void red_qxl_async_complete(QXLInstance *qxl, AsyncCommand > > *async_command); > > -struct Dispatcher *red_qxl_get_dispatcher(QXLInstance *qxl); > > gboolean red_qxl_use_client_monitors_config(QXLInstance *qxl); > > gboolean red_qxl_client_monitors_config(QXLInstance *qxl, > > VDAgentMonitorsConfig *monitors_config); > > gboolean red_qxl_get_primary_active(QXLInstance *qxl); > > @@ -64,243 +62,4 @@ void red_qxl_set_client_capabilities(QXLInstance *qxl, > > uint8_t client_present, > > uint8_t > > caps[SPICE_CAPABILITIES_SIZE]); > > > > -typedef uint32_t RedWorkerMessage; > > - > > -/* Keep message order, only append new messages! > > - * Replay code store enum values into save files. > > - */ > > -enum { > > - RED_WORKER_MESSAGE_NOP, > > - > > - RED_WORKER_MESSAGE_UPDATE, > > - RED_WORKER_MESSAGE_WAKEUP, > > - RED_WORKER_MESSAGE_OOM, > > - RED_WORKER_MESSAGE_READY, /* unused */ > > - > > - RED_WORKER_MESSAGE_DISPLAY_CONNECT, > > - RED_WORKER_MESSAGE_DISPLAY_DISCONNECT, > > - RED_WORKER_MESSAGE_DISPLAY_MIGRATE, > > - RED_WORKER_MESSAGE_START, > > - RED_WORKER_MESSAGE_STOP, > > - RED_WORKER_MESSAGE_CURSOR_CONNECT, > > - RED_WORKER_MESSAGE_CURSOR_DISCONNECT, > > - RED_WORKER_MESSAGE_CURSOR_MIGRATE, > > - RED_WORKER_MESSAGE_SET_COMPRESSION, > > - RED_WORKER_MESSAGE_SET_STREAMING_VIDEO, > > - RED_WORKER_MESSAGE_SET_MOUSE_MODE, > > - RED_WORKER_MESSAGE_ADD_MEMSLOT, > > - RED_WORKER_MESSAGE_DEL_MEMSLOT, > > - RED_WORKER_MESSAGE_RESET_MEMSLOTS, > > - RED_WORKER_MESSAGE_DESTROY_SURFACES, > > - RED_WORKER_MESSAGE_CREATE_PRIMARY_SURFACE, > > - RED_WORKER_MESSAGE_DESTROY_PRIMARY_SURFACE, > > - RED_WORKER_MESSAGE_RESET_CURSOR, > > - RED_WORKER_MESSAGE_RESET_IMAGE_CACHE, > > - RED_WORKER_MESSAGE_DESTROY_SURFACE_WAIT, > > - RED_WORKER_MESSAGE_LOADVM_COMMANDS, > > - /* async commands */ > > - RED_WORKER_MESSAGE_UPDATE_ASYNC, > > - RED_WORKER_MESSAGE_ADD_MEMSLOT_ASYNC, > > - RED_WORKER_MESSAGE_DESTROY_SURFACES_ASYNC, > > - RED_WORKER_MESSAGE_CREATE_PRIMARY_SURFACE_ASYNC, > > - RED_WORKER_MESSAGE_DESTROY_PRIMARY_SURFACE_ASYNC, > > - RED_WORKER_MESSAGE_DESTROY_SURFACE_WAIT_ASYNC, > > - /* suspend/windows resolution change command */ > > - RED_WORKER_MESSAGE_FLUSH_SURFACES_ASYNC, > > - > > - RED_WORKER_MESSAGE_DISPLAY_CHANNEL_CREATE, /* unused */ > > - RED_WORKER_MESSAGE_CURSOR_CHANNEL_CREATE, /* unused */ > > - > > - RED_WORKER_MESSAGE_MONITORS_CONFIG_ASYNC, > > - RED_WORKER_MESSAGE_DRIVER_UNLOAD, > > - RED_WORKER_MESSAGE_GL_SCANOUT, > > - RED_WORKER_MESSAGE_GL_DRAW_ASYNC, > > - RED_WORKER_MESSAGE_SET_VIDEO_CODECS, > > - > > - /* close worker thread */ > > - RED_WORKER_MESSAGE_CLOSE_WORKER, > > - > > - RED_WORKER_MESSAGE_COUNT // LAST > > -}; > > - > > -typedef struct RedWorkerMessageDisplayConnect { > > - RedClient * client; > > - RedsStream * stream; > > - RedChannelCapabilities caps; // red_worker should reset > > - int migration; > > -} RedWorkerMessageDisplayConnect; > > - > > -typedef struct RedWorkerMessageDisplayDisconnect { > > - RedChannelClient *rcc; > > -} RedWorkerMessageDisplayDisconnect; > > - > > -typedef struct RedWorkerMessageDisplayMigrate { > > - RedChannelClient *rcc; > > -} RedWorkerMessageDisplayMigrate; > > - > > -typedef struct RedWorkerMessageCursorConnect { > > - RedClient *client; > > - RedsStream *stream; > > - int migration; > > - RedChannelCapabilities caps; // red_worker should reset > > -} RedWorkerMessageCursorConnect; > > - > > -typedef struct RedWorkerMessageCursorDisconnect { > > - RedChannelClient *rcc; > > -} RedWorkerMessageCursorDisconnect; > > - > > -typedef struct RedWorkerMessageCursorMigrate { > > - RedChannelClient *rcc; > > -} RedWorkerMessageCursorMigrate; > > - > > -typedef struct RedWorkerMessageUpdate { > > - uint32_t surface_id; > > - QXLRect * qxl_area; > > - QXLRect * qxl_dirty_rects; > > - uint32_t num_dirty_rects; > > - uint32_t clear_dirty_region; > > -} RedWorkerMessageUpdate; > > - > > -typedef struct RedWorkerMessageAsync { > > - AsyncCommand *cmd; > > -} RedWorkerMessageAsync; > > - > > -typedef struct RedWorkerMessageUpdateAsync { > > - RedWorkerMessageAsync base; > > - uint32_t surface_id; > > - QXLRect qxl_area; > > - uint32_t clear_dirty_region; > > -} RedWorkerMessageUpdateAsync; > > - > > -typedef struct RedWorkerMessageAddMemslot { > > - QXLDevMemSlot mem_slot; > > -} RedWorkerMessageAddMemslot; > > - > > -typedef struct RedWorkerMessageAddMemslotAsync { > > - RedWorkerMessageAsync base; > > - QXLDevMemSlot mem_slot; > > -} RedWorkerMessageAddMemslotAsync; > > - > > -typedef struct RedWorkerMessageDelMemslot { > > - uint32_t slot_group_id; > > - uint32_t slot_id; > > -} RedWorkerMessageDelMemslot; > > - > > -typedef struct RedWorkerMessageDestroySurfaces { > > -} RedWorkerMessageDestroySurfaces; > > - > > -typedef struct RedWorkerMessageDestroySurfacesAsync { > > - RedWorkerMessageAsync base; > > -} RedWorkerMessageDestroySurfacesAsync; > > - > > - > > -typedef struct RedWorkerMessageDestroyPrimarySurface { > > - uint32_t surface_id; > > -} RedWorkerMessageDestroyPrimarySurface; > > - > > -typedef struct RedWorkerMessageDestroyPrimarySurfaceAsync { > > - RedWorkerMessageAsync base; > > - uint32_t surface_id; > > -} RedWorkerMessageDestroyPrimarySurfaceAsync; > > - > > -typedef struct RedWorkerMessageCreatePrimarySurfaceAsync { > > - RedWorkerMessageAsync base; > > - uint32_t surface_id; > > - QXLDevSurfaceCreate surface; > > -} RedWorkerMessageCreatePrimarySurfaceAsync; > > - > > -typedef struct RedWorkerMessageCreatePrimarySurface { > > - uint32_t surface_id; > > - QXLDevSurfaceCreate surface; > > -} RedWorkerMessageCreatePrimarySurface; > > - > > -typedef struct RedWorkerMessageResetImageCache { > > -} RedWorkerMessageResetImageCache; > > - > > -typedef struct RedWorkerMessageResetCursor { > > -} RedWorkerMessageResetCursor; > > - > > -typedef struct RedWorkerMessageWakeup { > > -} RedWorkerMessageWakeup; > > - > > -typedef struct RedWorkerMessageOom { > > -} RedWorkerMessageOom; > > - > > -typedef struct RedWorkerMessageStart { > > -} RedWorkerMessageStart; > > - > > -typedef struct RedWorkerMessageFlushSurfacesAsync { > > - RedWorkerMessageAsync base; > > -} RedWorkerMessageFlushSurfacesAsync; > > - > > -typedef struct RedWorkerMessageStop { > > -} RedWorkerMessageStop; > > - > > -/* this command is sync, so it's ok to pass a pointer */ > > -typedef struct RedWorkerMessageLoadvmCommands { > > - uint32_t count; > > - QXLCommandExt *ext; > > -} RedWorkerMessageLoadvmCommands; > > - > > -typedef struct RedWorkerMessageSetCompression { > > - SpiceImageCompression image_compression; > > -} RedWorkerMessageSetCompression; > > - > > -typedef struct RedWorkerMessageSetStreamingVideo { > > - uint32_t streaming_video; > > -} RedWorkerMessageSetStreamingVideo; > > - > > -typedef struct RedWorkerMessageSetVideoCodecs { > > - GArray* video_codecs; > > -} RedWorkerMessageSetVideoCodecs; > > - > > -typedef struct RedWorkerMessageSetMouseMode { > > - uint32_t mode; > > -} RedWorkerMessageSetMouseMode; > > - > > -typedef struct RedWorkerMessageDisplayChannelCreate { > > -} RedWorkerMessageDisplayChannelCreate; > > - > > -typedef struct RedWorkerMessageCursorChannelCreate { > > -} RedWorkerMessageCursorChannelCreate; > > - > > -typedef struct RedWorkerMessageDestroySurfaceWait { > > - uint32_t surface_id; > > -} RedWorkerMessageDestroySurfaceWait; > > - > > -typedef struct RedWorkerMessageDestroySurfaceWaitAsync { > > - RedWorkerMessageAsync base; > > - uint32_t surface_id; > > -} RedWorkerMessageDestroySurfaceWaitAsync; > > - > > -typedef struct RedWorkerMessageResetMemslots { > > -} RedWorkerMessageResetMemslots; > > - > > -typedef struct RedWorkerMessageMonitorsConfigAsync { > > - RedWorkerMessageAsync base; > > - QXLPHYSICAL monitors_config; > > - int group_id; > > - unsigned int max_monitors; > > -} RedWorkerMessageMonitorsConfigAsync; > > - > > -typedef struct RedWorkerMessageDriverUnload { > > -} RedWorkerMessageDriverUnload; > > - > > -typedef struct RedWorkerMessageGlScanout { > > -} RedWorkerMessageGlScanout; > > - > > -typedef struct RedWorkerMessageClose { > > -} RedWorkerMessageClose; > > - > > -typedef struct RedWorkerMessageGlDraw { > > - SpiceMsgDisplayGlDraw draw; > > -} RedWorkerMessageGlDraw; > > - > > -enum { > > - RED_DISPATCHER_PENDING_WAKEUP, > > - RED_DISPATCHER_PENDING_OOM, > > -}; > > - > > -void red_qxl_clear_pending(QXLState *qxl_state, int pending); > > - > > #endif /* RED_QXL_H_ */ > > diff --git a/server/red-replay-qxl.c b/server/red-replay-qxl.c > > index 6172ed22..2f31e9cd 100644 > > --- a/server/red-replay-qxl.c > > +++ b/server/red-replay-qxl.c > > @@ -26,6 +26,7 @@ > > > > #include "reds.h" > > #include "red-qxl.h" > > +#include "red-worker.h" > > #include "red-common.h" > > #include "memslot.h" > > #include "red-parse-qxl.h" > > diff --git a/server/red-worker.h b/server/red-worker.h > > index 8ec28f14..4f64b729 100644 > > --- a/server/red-worker.h > > +++ b/server/red-worker.h > > @@ -15,6 +15,12 @@ > > License along with this library; if not, see > > <http://www.gnu.org/licenses/>. > > */ > > > > +/* This header should contains internal details between RedQxl and > > + * RedWorker. > > + * Should be included only by red-worker.c, red-qxl.c and > > + * red-replay-qxl.c (which uses message values). > > + */ > > + > > #ifndef RED_WORKER_H_ > > #define RED_WORKER_H_ > > > > @@ -31,4 +37,246 @@ RedWorker* red_worker_new(QXLInstance *qxl, > > bool red_worker_run(RedWorker *worker); > > void red_worker_free(RedWorker *worker); > > > > +void red_qxl_async_complete(QXLInstance *qxl, AsyncCommand > > *async_command); > > Given that all functions in red-worker.h begin with red-worker, shouldn’t > that > be renamed as red_worker_qxl_async_complete? Some for other functions > you moved here. > I think is better to change names in a follow up patch. > > +struct Dispatcher *red_qxl_get_dispatcher(QXLInstance *qxl); > > Rename red_worker_.…? > I don't think is a nice idea. > > + > > +typedef uint32_t RedWorkerMessage; > > + > > +/* Keep message order, only append new messages! > > + * Replay code store enum values into save files. > > + */ > > +enum { > > + RED_WORKER_MESSAGE_NOP, > > + > > + RED_WORKER_MESSAGE_UPDATE, > > + RED_WORKER_MESSAGE_WAKEUP, > > + RED_WORKER_MESSAGE_OOM, > > + RED_WORKER_MESSAGE_READY, /* unused */ > > + > > + RED_WORKER_MESSAGE_DISPLAY_CONNECT, > > + RED_WORKER_MESSAGE_DISPLAY_DISCONNECT, > > + RED_WORKER_MESSAGE_DISPLAY_MIGRATE, > > + RED_WORKER_MESSAGE_START, > > + RED_WORKER_MESSAGE_STOP, > > + RED_WORKER_MESSAGE_CURSOR_CONNECT, > > + RED_WORKER_MESSAGE_CURSOR_DISCONNECT, > > + RED_WORKER_MESSAGE_CURSOR_MIGRATE, > > + RED_WORKER_MESSAGE_SET_COMPRESSION, > > + RED_WORKER_MESSAGE_SET_STREAMING_VIDEO, > > + RED_WORKER_MESSAGE_SET_MOUSE_MODE, > > + RED_WORKER_MESSAGE_ADD_MEMSLOT, > > + RED_WORKER_MESSAGE_DEL_MEMSLOT, > > + RED_WORKER_MESSAGE_RESET_MEMSLOTS, > > + RED_WORKER_MESSAGE_DESTROY_SURFACES, > > + RED_WORKER_MESSAGE_CREATE_PRIMARY_SURFACE, > > + RED_WORKER_MESSAGE_DESTROY_PRIMARY_SURFACE, > > + RED_WORKER_MESSAGE_RESET_CURSOR, > > + RED_WORKER_MESSAGE_RESET_IMAGE_CACHE, > > + RED_WORKER_MESSAGE_DESTROY_SURFACE_WAIT, > > + RED_WORKER_MESSAGE_LOADVM_COMMANDS, > > + /* async commands */ > > + RED_WORKER_MESSAGE_UPDATE_ASYNC, > > + RED_WORKER_MESSAGE_ADD_MEMSLOT_ASYNC, > > + RED_WORKER_MESSAGE_DESTROY_SURFACES_ASYNC, > > + RED_WORKER_MESSAGE_CREATE_PRIMARY_SURFACE_ASYNC, > > + RED_WORKER_MESSAGE_DESTROY_PRIMARY_SURFACE_ASYNC, > > + RED_WORKER_MESSAGE_DESTROY_SURFACE_WAIT_ASYNC, > > + /* suspend/windows resolution change command */ > > + RED_WORKER_MESSAGE_FLUSH_SURFACES_ASYNC, > > + > > + RED_WORKER_MESSAGE_DISPLAY_CHANNEL_CREATE, /* unused */ > > + RED_WORKER_MESSAGE_CURSOR_CHANNEL_CREATE, /* unused */ > > + > > + RED_WORKER_MESSAGE_MONITORS_CONFIG_ASYNC, > > + RED_WORKER_MESSAGE_DRIVER_UNLOAD, > > + RED_WORKER_MESSAGE_GL_SCANOUT, > > + RED_WORKER_MESSAGE_GL_DRAW_ASYNC, > > + RED_WORKER_MESSAGE_SET_VIDEO_CODECS, > > + > > + /* close worker thread */ > > + RED_WORKER_MESSAGE_CLOSE_WORKER, > > + > > + RED_WORKER_MESSAGE_COUNT // LAST > > +}; > > + > > +typedef struct RedWorkerMessageDisplayConnect { > > + RedClient * client; > > + RedsStream * stream; > > + RedChannelCapabilities caps; // red_worker should reset > > + int migration; > > +} RedWorkerMessageDisplayConnect; > > + > > +typedef struct RedWorkerMessageDisplayDisconnect { > > + RedChannelClient *rcc; > > +} RedWorkerMessageDisplayDisconnect; > > + > > +typedef struct RedWorkerMessageDisplayMigrate { > > + RedChannelClient *rcc; > > +} RedWorkerMessageDisplayMigrate; > > + > > +typedef struct RedWorkerMessageCursorConnect { > > + RedClient *client; > > + RedsStream *stream; > > + int migration; > > + RedChannelCapabilities caps; // red_worker should reset > > +} RedWorkerMessageCursorConnect; > > + > > +typedef struct RedWorkerMessageCursorDisconnect { > > + RedChannelClient *rcc; > > +} RedWorkerMessageCursorDisconnect; > > + > > +typedef struct RedWorkerMessageCursorMigrate { > > + RedChannelClient *rcc; > > +} RedWorkerMessageCursorMigrate; > > + > > +typedef struct RedWorkerMessageUpdate { > > + uint32_t surface_id; > > + QXLRect * qxl_area; > > + QXLRect * qxl_dirty_rects; > > + uint32_t num_dirty_rects; > > + uint32_t clear_dirty_region; > > +} RedWorkerMessageUpdate; > > + > > +typedef struct RedWorkerMessageAsync { > > + AsyncCommand *cmd; > > +} RedWorkerMessageAsync; > > + > > +typedef struct RedWorkerMessageUpdateAsync { > > + RedWorkerMessageAsync base; > > + uint32_t surface_id; > > + QXLRect qxl_area; > > + uint32_t clear_dirty_region; > > +} RedWorkerMessageUpdateAsync; > > + > > +typedef struct RedWorkerMessageAddMemslot { > > + QXLDevMemSlot mem_slot; > > +} RedWorkerMessageAddMemslot; > > + > > +typedef struct RedWorkerMessageAddMemslotAsync { > > + RedWorkerMessageAsync base; > > + QXLDevMemSlot mem_slot; > > +} RedWorkerMessageAddMemslotAsync; > > + > > +typedef struct RedWorkerMessageDelMemslot { > > + uint32_t slot_group_id; > > + uint32_t slot_id; > > +} RedWorkerMessageDelMemslot; > > + > > +typedef struct RedWorkerMessageDestroySurfaces { > > +} RedWorkerMessageDestroySurfaces; > > + > > +typedef struct RedWorkerMessageDestroySurfacesAsync { > > + RedWorkerMessageAsync base; > > +} RedWorkerMessageDestroySurfacesAsync; > > + > > + > > +typedef struct RedWorkerMessageDestroyPrimarySurface { > > + uint32_t surface_id; > > +} RedWorkerMessageDestroyPrimarySurface; > > + > > +typedef struct RedWorkerMessageDestroyPrimarySurfaceAsync { > > + RedWorkerMessageAsync base; > > + uint32_t surface_id; > > +} RedWorkerMessageDestroyPrimarySurfaceAsync; > > + > > +typedef struct RedWorkerMessageCreatePrimarySurfaceAsync { > > + RedWorkerMessageAsync base; > > + uint32_t surface_id; > > + QXLDevSurfaceCreate surface; > > +} RedWorkerMessageCreatePrimarySurfaceAsync; > > + > > +typedef struct RedWorkerMessageCreatePrimarySurface { > > + uint32_t surface_id; > > + QXLDevSurfaceCreate surface; > > +} RedWorkerMessageCreatePrimarySurface; > > + > > +typedef struct RedWorkerMessageResetImageCache { > > +} RedWorkerMessageResetImageCache; > > + > > +typedef struct RedWorkerMessageResetCursor { > > +} RedWorkerMessageResetCursor; > > + > > +typedef struct RedWorkerMessageWakeup { > > +} RedWorkerMessageWakeup; > > + > > +typedef struct RedWorkerMessageOom { > > +} RedWorkerMessageOom; > > + > > +typedef struct RedWorkerMessageStart { > > +} RedWorkerMessageStart; > > + > > +typedef struct RedWorkerMessageFlushSurfacesAsync { > > + RedWorkerMessageAsync base; > > +} RedWorkerMessageFlushSurfacesAsync; > > + > > +typedef struct RedWorkerMessageStop { > > +} RedWorkerMessageStop; > > + > > +/* this command is sync, so it's ok to pass a pointer */ > > +typedef struct RedWorkerMessageLoadvmCommands { > > + uint32_t count; > > + QXLCommandExt *ext; > > +} RedWorkerMessageLoadvmCommands; > > + > > +typedef struct RedWorkerMessageSetCompression { > > + SpiceImageCompression image_compression; > > +} RedWorkerMessageSetCompression; > > + > > +typedef struct RedWorkerMessageSetStreamingVideo { > > + uint32_t streaming_video; > > +} RedWorkerMessageSetStreamingVideo; > > + > > +typedef struct RedWorkerMessageSetVideoCodecs { > > + GArray* video_codecs; > > +} RedWorkerMessageSetVideoCodecs; > > + > > +typedef struct RedWorkerMessageSetMouseMode { > > + uint32_t mode; > > +} RedWorkerMessageSetMouseMode; > > + > > +typedef struct RedWorkerMessageDisplayChannelCreate { > > +} RedWorkerMessageDisplayChannelCreate; > > + > > +typedef struct RedWorkerMessageCursorChannelCreate { > > +} RedWorkerMessageCursorChannelCreate; > > + > > +typedef struct RedWorkerMessageDestroySurfaceWait { > > + uint32_t surface_id; > > +} RedWorkerMessageDestroySurfaceWait; > > + > > +typedef struct RedWorkerMessageDestroySurfaceWaitAsync { > > + RedWorkerMessageAsync base; > > + uint32_t surface_id; > > +} RedWorkerMessageDestroySurfaceWaitAsync; > > + > > +typedef struct RedWorkerMessageResetMemslots { > > +} RedWorkerMessageResetMemslots; > > + > > +typedef struct RedWorkerMessageMonitorsConfigAsync { > > + RedWorkerMessageAsync base; > > + QXLPHYSICAL monitors_config; > > + int group_id; > > + unsigned int max_monitors; > > +} RedWorkerMessageMonitorsConfigAsync; > > + > > +typedef struct RedWorkerMessageDriverUnload { > > +} RedWorkerMessageDriverUnload; > > + > > +typedef struct RedWorkerMessageGlScanout { > > +} RedWorkerMessageGlScanout; > > + > > +typedef struct RedWorkerMessageClose { > > +} RedWorkerMessageClose; > > + > > +typedef struct RedWorkerMessageGlDraw { > > + SpiceMsgDisplayGlDraw draw; > > +} RedWorkerMessageGlDraw; > > + > > +enum { > > + RED_DISPATCHER_PENDING_WAKEUP, > > + RED_DISPATCHER_PENDING_OOM, > > +}; > > Those probably don’t need renaming, since “dispatcher” is a concept > that I believe is naturally associated with “worker”. Your call. > Yes, dispatcher maybe is weird. > > + > > +void red_qxl_clear_pending(QXLState *qxl_state, int pending); > > Rename red_worker_.…? > I think red_qxl_ here is the right one. > > + > > #endif /* RED_WORKER_H_ */ Frediano _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/spice-devel