diff options
author | Frediano Ziglio <fziglio@redhat.com> | 2015-11-04 15:07:28 +0000 |
---|---|---|
committer | Frediano Ziglio <fziglio@redhat.com> | 2015-11-05 11:12:55 +0000 |
commit | 63b8ea5afba5c6eb1b9825b06f2006930c318aed (patch) | |
tree | e5f0bbbf4906a125108a170b0013278fcc26186d /server | |
parent | d29ebe459056aa6307f99063db1625f8e94101fa (diff) | |
download | spice-63b8ea5afba5c6eb1b9825b06f2006930c318aed.tar.gz spice-63b8ea5afba5c6eb1b9825b06f2006930c318aed.tar.xz spice-63b8ea5afba5c6eb1b9825b06f2006930c318aed.zip |
worker: don't process drawable if it can't be allocated
Acked-by: Fabiano FidĂȘncio <fidencio@redhat.com>
Diffstat (limited to 'server')
-rw-r--r-- | server/red_worker.c | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/server/red_worker.c b/server/red_worker.c index f317b108..b6be530f 100644 --- a/server/red_worker.c +++ b/server/red_worker.c @@ -3181,14 +3181,14 @@ static inline int red_handle_self_bitmap(RedWorker *worker, Drawable *drawable) return TRUE; } -static void free_one_drawable(RedWorker *worker, int force_glz_free) +static bool free_one_drawable(RedWorker *worker, int force_glz_free) { RingItem *ring_item = ring_get_tail(&worker->current_list); Drawable *drawable; Container *container; if (!ring_item) { - return; + return FALSE; } drawable = SPICE_CONTAINEROF(ring_item, Drawable, list_link); if (force_glz_free) { @@ -3203,6 +3203,8 @@ static void free_one_drawable(RedWorker *worker, int force_glz_free) current_remove_drawable(worker, drawable); container_cleanup(worker, container); + + return TRUE; } static Drawable *get_drawable(RedWorker *worker, uint8_t effect, RedDrawable *red_drawable, @@ -3223,7 +3225,8 @@ static Drawable *get_drawable(RedWorker *worker, uint8_t effect, RedDrawable *re } while (!(drawable = alloc_drawable(worker))) { - free_one_drawable(worker, FALSE); + if (!free_one_drawable(worker, FALSE)) + return NULL; } worker->drawable_count++; memset(drawable, 0, sizeof(Drawable)); @@ -3326,7 +3329,6 @@ static inline void red_process_draw(RedWorker *worker, RedDrawable *red_drawable Drawable *drawable = get_drawable(worker, red_drawable->effect, red_drawable, group_id); if (!drawable) { - rendering_incorrect("failed to get_drawable"); return; } |