On Thu, Nov 5, 2015 at 10:26 AM, Frediano Ziglio <fziglio@xxxxxxxxxx> wrote: >> >> From: Marc-André Lureau <marcandre.lureau@xxxxxxxxx> >> >> --- >> server/red_worker.c | 38 ++++++++++++++++++-------------------- >> 1 file changed, 18 insertions(+), 20 deletions(-) >> >> diff --git a/server/red_worker.c b/server/red_worker.c >> index 32611e2..480f2ca 100644 >> --- a/server/red_worker.c >> +++ b/server/red_worker.c >> @@ -583,10 +583,8 @@ static void >> dcc_push_monitors_config(DisplayChannelClient *dcc); >> SAFE_FOREACH(link, next, channel, &(channel)->clients, dcc, >> LINK_TO_DCC(link)) >> >> >> -#define WORKER_FOREACH_DCC_SAFE(worker, link, next, dcc) \ >> - DCC_FOREACH_SAFE(link, next, dcc, \ >> - ((((worker) && (worker)->display_channel))? \ >> - (&(worker)->display_channel->common.base) : NULL)) >> +#define FOREACH_DCC(display_channel, link, next, dcc) \ >> + DCC_FOREACH_SAFE(link, next, dcc, RED_CHANNEL(display_channel)) >> > > I agree to remove the WORKER_ part, not the _SAFE one. > _SAFE macros allows to delete current element but can be a bit slower. > If the item is removed the reader can be confusing not seeing an "unsafe" > macro. Your argument makes sense, but we do not provide the "not" _SAFE macros anyway. > > For the moment I won't ack/nack. I would like to have other opinions. > For me it's good as it is and would be good keeping the _SAFE as well. >> >> #define LINK_TO_DPI(ptr) SPICE_CONTAINEROF((ptr), DrawablePipeItem, base) >> @@ -842,7 +840,7 @@ static void red_pipes_add_drawable(RedWorker *worker, >> Drawable *drawable) >> RingItem *dcc_ring_item, *next; >> >> spice_warn_if(!ring_is_empty(&drawable->pipes)); >> - WORKER_FOREACH_DCC_SAFE(worker, dcc_ring_item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, dcc_ring_item, next, dcc) { >> dcc_add_drawable(dcc, drawable); >> } >> } >> @@ -882,7 +880,7 @@ static inline void red_pipes_add_drawable_after(RedWorker >> *worker, >> if (num_other_linked != >> worker->display_channel->common.base.clients_num) { >> RingItem *worker_item, *next; >> spice_debug("TODO: not O(n^2)"); >> - WORKER_FOREACH_DCC_SAFE(worker, worker_item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, worker_item, next, dcc) { >> int sent = 0; >> DRAWABLE_FOREACH_DPI_SAFE(pos_after, dpi_link, dpi_next, >> dpi_pos_after) { >> if (dpi_pos_after->dcc == dcc) { >> @@ -1075,7 +1073,7 @@ static inline void red_destroy_surface(RedWorker >> *worker, uint32_t surface_id) >> >> region_destroy(&surface->draw_dirty_region); >> surface->context.canvas = NULL; >> - WORKER_FOREACH_DCC_SAFE(worker, link, next, dcc) { >> + FOREACH_DCC(worker->display_channel, link, next, dcc) { >> red_destroy_surface_item(worker, dcc, surface_id); >> } >> >> @@ -1409,7 +1407,7 @@ static void >> red_clear_surface_drawables_from_pipes(RedWorker *worker, >> RingItem *item, *next; >> DisplayChannelClient *dcc; >> >> - WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, item, next, dcc) { >> if (!red_clear_surface_drawables_from_pipe(dcc, surface_id, >> wait_if_used)) { >> red_channel_client_disconnect(&dcc->common.base); >> } >> @@ -1771,7 +1769,7 @@ static void red_attach_stream(RedWorker *worker, >> Drawable *drawable, Stream *str >> stream->num_input_frames++; >> } >> >> - WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, item, next, dcc) { >> StreamAgent *agent; >> QRegion clip_in_draw_dest; >> >> @@ -1837,7 +1835,7 @@ static void red_stop_stream(RedWorker *worker, Stream >> *stream) >> spice_assert(ring_item_is_linked(&stream->link)); >> spice_assert(!stream->current); >> spice_debug("stream %d", get_stream_id(worker, stream)); >> - WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, item, next, dcc) { >> StreamAgent *stream_agent; >> >> stream_agent = &dcc->stream_agents[get_stream_id(worker, stream)]; >> @@ -1954,7 +1952,7 @@ static inline void >> red_detach_stream_gracefully(RedWorker *worker, Stream *strea >> RingItem *item, *next; >> DisplayChannelClient *dcc; >> >> - WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, item, next, dcc) { >> red_display_detach_stream_gracefully(dcc, stream, >> update_area_limit); >> } >> if (stream->current) { >> @@ -1985,7 +1983,7 @@ static void red_detach_streams_behind(RedWorker >> *worker, QRegion *region, Drawab >> int detach_stream = 0; >> item = ring_next(ring, item); >> >> - WORKER_FOREACH_DCC_SAFE(worker, dcc_ring_item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, dcc_ring_item, next, dcc) { >> StreamAgent *agent = &dcc->stream_agents[get_stream_id(worker, >> stream)]; >> >> if (region_intersects(&agent->vis_region, region)) { >> @@ -2033,7 +2031,7 @@ static void red_streams_update_visible_region(RedWorker >> *worker, Drawable *drawa >> continue; >> } >> >> - WORKER_FOREACH_DCC_SAFE(worker, dcc_ring_item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, dcc_ring_item, next, dcc) { >> agent = &dcc->stream_agents[get_stream_id(worker, stream)]; >> >> if (region_intersects(&agent->vis_region, >> &drawable->tree_item.base.rgn)) { >> @@ -2306,7 +2304,7 @@ static void red_create_stream(RedWorker *worker, >> Drawable *drawable) >> stream->input_fps_start_time = drawable->creation_time; >> worker->streams_size_total += stream->width * stream->height; >> worker->stream_count++; >> - WORKER_FOREACH_DCC_SAFE(worker, dcc_ring_item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, dcc_ring_item, next, dcc) { >> red_display_create_stream(dcc, stream); >> } >> spice_debug("stream %d %dx%d (%d, %d) (%d, %d)", (int)(stream - >> worker->streams_buf), stream->width, >> @@ -2499,7 +2497,7 @@ static inline void pre_stream_item_swap(RedWorker >> *worker, Stream *stream, Drawa >> } >> >> >> - WORKER_FOREACH_DCC_SAFE(worker, ring_item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, ring_item, next, dcc) { >> double drop_factor; >> >> agent = &dcc->stream_agents[index]; >> @@ -3996,7 +3994,7 @@ static void red_free_some(RedWorker *worker) >> >> spice_debug("#draw=%d, #red_draw=%d, #glz_draw=%d", >> worker->drawable_count, >> worker->red_drawable_count, worker->glz_drawable_count); >> - WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, item, next, dcc) { >> GlzSharedDictionary *glz_dict = dcc ? dcc->glz_dict : NULL; >> >> if (glz_dict) { >> @@ -4011,7 +4009,7 @@ static void red_free_some(RedWorker *worker) >> free_one_drawable(worker, TRUE); >> } >> >> - WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, item, next, dcc) { >> GlzSharedDictionary *glz_dict = dcc ? dcc->glz_dict : NULL; >> >> if (glz_dict) { >> @@ -8173,7 +8171,7 @@ static void red_worker_create_surface_item(RedWorker >> *worker, int surface_id) >> DisplayChannelClient *dcc; >> RingItem *item, *next; >> >> - WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, item, next, dcc) { >> red_create_surface_item(dcc, surface_id); >> } >> } >> @@ -8184,7 +8182,7 @@ static void red_worker_push_surface_image(RedWorker >> *worker, int surface_id) >> DisplayChannelClient *dcc; >> RingItem *item, *next; >> >> - WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, item, next, dcc) { >> red_push_surface_image(dcc, surface_id); >> } >> } >> @@ -9570,7 +9568,7 @@ static void red_worker_push_monitors_config(RedWorker >> *worker) >> DisplayChannelClient *dcc; >> RingItem *item, *next; >> >> - WORKER_FOREACH_DCC_SAFE(worker, item, next, dcc) { >> + FOREACH_DCC(worker->display_channel, item, next, dcc) { >> dcc_push_monitors_config(dcc); >> } >> } >> -- >> 2.4.3 > > Frediano > _______________________________________________ > Spice-devel mailing list > Spice-devel@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/spice-devel ACK! _______________________________________________ Spice-devel mailing list Spice-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/spice-devel