summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrediano Ziglio <fziglio@redhat.com>2015-11-04 15:07:28 +0000
committerFrediano Ziglio <fziglio@redhat.com>2015-11-05 11:12:55 +0000
commit63b8ea5afba5c6eb1b9825b06f2006930c318aed (patch)
treee5f0bbbf4906a125108a170b0013278fcc26186d
parentd29ebe459056aa6307f99063db1625f8e94101fa (diff)
downloadspice-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>
-rw-r--r--server/red_worker.c10
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;
}