diff options
author | Alon Levy <alevy@redhat.com> | 2010-11-07 15:44:37 +0200 |
---|---|---|
committer | Alon Levy <alevy@redhat.com> | 2010-11-07 18:51:59 +0200 |
commit | f1bf3b4c56d0507068182489e25dcf2302293c17 (patch) | |
tree | 04f6b41f8a35dae45e2555811241cb4229aadf12 /server/red_worker.c | |
parent | 78a0018e7f403f4fc1d7ea3c9114f48ab9e3c0ad (diff) | |
download | spice-f1bf3b4c56d0507068182489e25dcf2302293c17.tar.gz spice-f1bf3b4c56d0507068182489e25dcf2302293c17.tar.xz spice-f1bf3b4c56d0507068182489e25dcf2302293c17.zip |
server/red_worker: extract common_release_pipe_item from red_pipe_clear
Diffstat (limited to 'server/red_worker.c')
-rw-r--r-- | server/red_worker.c | 106 |
1 files changed, 56 insertions, 50 deletions
diff --git a/server/red_worker.c b/server/red_worker.c index 981eba50..8a651dd1 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -1354,63 +1354,69 @@ static void release_upgrade_item(RedWorker* worker, UpgradeItem *item) } } +static void common_release_pipe_item(RedChannel *channel, PipeItem *item) +{ + CommonChannel *common = SPICE_CONTAINEROF(channel, CommonChannel, base); + + switch (item->type) { + case PIPE_ITEM_TYPE_DRAW: + release_drawable(common->worker, SPICE_CONTAINEROF(item, Drawable, pipe_item)); + break; + case PIPE_ITEM_TYPE_CURSOR: + red_release_cursor(common->worker, (CursorItem *)item); + break; + case PIPE_ITEM_TYPE_UPGRADE: + release_upgrade_item(common->worker, (UpgradeItem *)item); + break; + case PIPE_ITEM_TYPE_PIXMAP_RESET: + case PIPE_ITEM_TYPE_PIXMAP_SYNC: + case PIPE_ITEM_TYPE_INVAL_ONE: + case PIPE_ITEM_TYPE_MIGRATE: + case PIPE_ITEM_TYPE_SET_ACK: + case PIPE_ITEM_TYPE_CURSOR_INIT: + case PIPE_ITEM_TYPE_VERB: + case PIPE_ITEM_TYPE_MIGRATE_DATA: + case PIPE_ITEM_TYPE_INVAL_PALLET_CACHE: + case PIPE_ITEM_TYPE_INVAL_CURSOR_CACHE: + free(item); + break; + case PIPE_ITEM_TYPE_IMAGE: + release_image_item((ImageItem *)item); + break; + case PIPE_ITEM_TYPE_STREAM_CREATE: + red_display_release_stream((DisplayChannel *)channel, + SPICE_CONTAINEROF(item, StreamAgent, create_item)); + break; + case PIPE_ITEM_TYPE_STREAM_CLIP: + red_display_release_stream_clip((DisplayChannel *)channel, (StreamClipItem*)item); + break; + case PIPE_ITEM_TYPE_STREAM_DESTROY: + red_display_release_stream((DisplayChannel *)channel, + SPICE_CONTAINEROF(item, StreamAgent, destroy_item)); + break; + case PIPE_ITEM_TYPE_CREATE_SURFACE: { + SurfaceCreateItem *surface_create = SPICE_CONTAINEROF(item, SurfaceCreateItem, + pipe_item); + free(surface_create); + break; + } + case PIPE_ITEM_TYPE_DESTROY_SURFACE: { + SurfaceDestroyItem *surface_destroy = SPICE_CONTAINEROF(item, SurfaceDestroyItem, + pipe_item); + free(surface_destroy); + break; + } + } +} + static void red_pipe_clear(RedChannel *channel) { PipeItem *item; - CommonChannel *common = SPICE_CONTAINEROF(channel, CommonChannel, base); ASSERT(channel); while ((item = (PipeItem *)ring_get_head(&channel->pipe))) { ring_remove(&item->link); - switch (item->type) { - case PIPE_ITEM_TYPE_DRAW: - release_drawable(common->worker, SPICE_CONTAINEROF(item, Drawable, pipe_item)); - break; - case PIPE_ITEM_TYPE_CURSOR: - red_release_cursor(common->worker, (CursorItem *)item); - break; - case PIPE_ITEM_TYPE_UPGRADE: - release_upgrade_item(common->worker, (UpgradeItem *)item); - break; - case PIPE_ITEM_TYPE_PIXMAP_RESET: - case PIPE_ITEM_TYPE_PIXMAP_SYNC: - case PIPE_ITEM_TYPE_INVAL_ONE: - case PIPE_ITEM_TYPE_MIGRATE: - case PIPE_ITEM_TYPE_SET_ACK: - case PIPE_ITEM_TYPE_CURSOR_INIT: - case PIPE_ITEM_TYPE_VERB: - case PIPE_ITEM_TYPE_MIGRATE_DATA: - case PIPE_ITEM_TYPE_INVAL_PALLET_CACHE: - case PIPE_ITEM_TYPE_INVAL_CURSOR_CACHE: - free(item); - break; - case PIPE_ITEM_TYPE_IMAGE: - release_image_item((ImageItem *)item); - break; - case PIPE_ITEM_TYPE_STREAM_CREATE: - red_display_release_stream((DisplayChannel *)channel, - SPICE_CONTAINEROF(item, StreamAgent, create_item)); - break; - case PIPE_ITEM_TYPE_STREAM_CLIP: - red_display_release_stream_clip((DisplayChannel *)channel, (StreamClipItem*)item); - break; - case PIPE_ITEM_TYPE_STREAM_DESTROY: - red_display_release_stream((DisplayChannel *)channel, - SPICE_CONTAINEROF(item, StreamAgent, destroy_item)); - break; - case PIPE_ITEM_TYPE_CREATE_SURFACE: { - SurfaceCreateItem *surface_create = SPICE_CONTAINEROF(item, SurfaceCreateItem, - pipe_item); - free(surface_create); - break; - } - case PIPE_ITEM_TYPE_DESTROY_SURFACE: { - SurfaceDestroyItem *surface_destroy = SPICE_CONTAINEROF(item, SurfaceDestroyItem, - pipe_item); - free(surface_destroy); - break; - } - } + common_release_pipe_item(channel, item); } channel->pipe_size = 0; } |