diff options
author | Yonit Halperin <yhalperi@yhalperi.tlv.redhat.com> | 2010-08-23 09:05:27 +0300 |
---|---|---|
committer | Yonit Halperin <yhalperi@redhat.com> | 2010-08-24 10:10:10 +0300 |
commit | 11777186698a8e370c1b5fc82feb046495f9c491 (patch) | |
tree | 8c104f976ca47fb2e278d81d9f52a26df8fecb43 /server/red_worker.c | |
parent | 2acc011c62089c7ca2b8ad6a9f8cced6a66a5f16 (diff) | |
download | spice-11777186698a8e370c1b5fc82feb046495f9c491.tar.gz spice-11777186698a8e370c1b5fc82feb046495f9c491.tar.xz spice-11777186698a8e370c1b5fc82feb046495f9c491.zip |
server: remove unnecessary dependency between surfaces and Glz drawables
Fixes freedesktop bug #28568
Diffstat (limited to 'server/red_worker.c')
-rw-r--r-- | server/red_worker.c | 30 |
1 files changed, 4 insertions, 26 deletions
diff --git a/server/red_worker.c b/server/red_worker.c index e56e4090..84a771ab 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -1541,10 +1541,9 @@ static inline void set_surface_release_info(RedWorker *worker, uint32_t surface_ } static inline void free_red_drawable(RedWorker *worker, RedDrawable *drawable, uint32_t group_id, - SpiceImage *self_bitmap, int surface_id) + SpiceImage *self_bitmap) { QXLReleaseInfoExt release_info_ext; - red_destroy_surface(worker, surface_id); if (self_bitmap) { red_put_image(self_bitmap); @@ -1600,12 +1599,12 @@ static inline void release_drawable(RedWorker *worker, Drawable *item) remove_drawable_dependencies(worker, item); red_dec_surfaces_drawable_dependencies(worker, item); + red_destroy_surface(worker, item->surface_id); if (item->red_glz_drawable) { item->red_glz_drawable->drawable = NULL; } else { // no reference to the qxl drawable left - free_red_drawable(worker, item->red_drawable, item->group_id, item->self_bitmap, - item->surface_id); + free_red_drawable(worker, item->red_drawable, item->group_id, item->self_bitmap); } free_drawable(worker, item); } @@ -1798,24 +1797,6 @@ static void red_current_clear(RedWorker *worker, int surface_id) } } -static void red_clear_surface_glz_drawables(RedWorker *worker, int surface_id) -{ - RingItem *ring_item; - - if (!worker->display_channel) { - return; - } - - pthread_rwlock_wrlock(&worker->display_channel->glz_dict->encode_lock); - - while ((ring_item = ring_get_head(&worker->surfaces[surface_id].glz_drawables))) { - RedGlzDrawable *now = SPICE_CONTAINEROF(ring_item, RedGlzDrawable, surface_link); - red_display_free_glz_drawable(worker->display_channel, now); - } - - pthread_rwlock_unlock(&worker->display_channel->glz_dict->encode_lock); -} - static void red_clear_surface_drawables_from_pipe(RedWorker *worker, int surface_id) { Ring *ring; @@ -3541,7 +3522,6 @@ static inline void red_process_surface(RedWorker *worker, RedSurfaceCmd *surface set_surface_release_info(worker, surface_id, 0, surface->release_info, group_id); red_handle_depends_on_target_surface(worker, surface_id); red_current_clear(worker, surface_id); - red_clear_surface_glz_drawables(worker, surface_id); red_clear_surface_drawables_from_pipe(worker, surface_id); red_destroy_surface(worker, surface_id); break; @@ -4759,8 +4739,7 @@ static void red_display_free_glz_drawable_instance(DisplayChannel *channel, drawable->red_glz_drawable = NULL; } else { // no reference to the qxl drawable left free_red_drawable(channel->base.worker, glz_drawable->red_drawable, - glz_drawable->group_id, glz_drawable->self_bitmap, - glz_drawable->surface_id); + glz_drawable->group_id, glz_drawable->self_bitmap); } if (ring_item_is_linked(&glz_drawable->link)) { @@ -9802,7 +9781,6 @@ static inline void destroy_surface_wait(RedWorker *worker, int surface_id) } red_flush_surface_pipe(worker); red_current_clear(worker, surface_id); - red_clear_surface_glz_drawables(worker, surface_id); red_clear_surface_drawables_from_pipe(worker, surface_id); red_wait_outgoing_item((RedChannel *)worker->display_channel); if (worker->display_channel) { |