summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--server/red_worker.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/server/red_worker.c b/server/red_worker.c
index 2759857f..747bb9ed 100644
--- a/server/red_worker.c
+++ b/server/red_worker.c
@@ -182,7 +182,7 @@ static void red_update_area(DisplayChannel *display, const SpiceRect *area, int
static void red_update_area_till(DisplayChannel *display, const SpiceRect *area, int surface_id,
Drawable *last);
static inline void display_begin_send_message(RedChannelClient *rcc);
-static void red_release_glz(DisplayChannelClient *dcc);
+static void dcc_release_glz(DisplayChannelClient *dcc);
static void red_freeze_glz(DisplayChannelClient *dcc);
static void display_channel_push_release(DisplayChannelClient *dcc, uint8_t type, uint64_t id,
uint64_t* sync_data);
@@ -2039,7 +2039,7 @@ static void dcc_free_glz_drawable(DisplayChannelClient *dcc, RedGlzDrawable *dra
/* Clear all lz drawables - enforce their removal from the global dictionary.
NOTE - prevents encoding using the dictionary during the operation*/
-static void red_display_client_clear_glz_drawables(DisplayChannelClient *dcc)
+static void dcc_free_glz_drawables(DisplayChannelClient *dcc)
{
RingItem *ring_link;
GlzSharedDictionary *glz_dict = dcc ? dcc->glz_dict : NULL;
@@ -2059,7 +2059,7 @@ static void red_display_client_clear_glz_drawables(DisplayChannelClient *dcc)
pthread_rwlock_unlock(&glz_dict->encode_lock);
}
-static void red_display_clear_glz_drawables(DisplayChannel *display_channel)
+static void display_channel_free_glz_drawables(DisplayChannel *display_channel)
{
RingItem *link, *next;
DisplayChannelClient *dcc;
@@ -2068,7 +2068,7 @@ static void red_display_clear_glz_drawables(DisplayChannel *display_channel)
return;
}
DCC_FOREACH_SAFE(link, next, dcc, RED_CHANNEL(display_channel)) {
- red_display_client_clear_glz_drawables(dcc);
+ dcc_free_glz_drawables(dcc);
}
}
@@ -4631,7 +4631,7 @@ static void display_channel_client_on_disconnect(RedChannelClient *rcc)
display_channel_compress_stats_print(display);
pixmap_cache_unref(dcc->pixmap_cache);
dcc->pixmap_cache = NULL;
- red_release_glz(dcc);
+ dcc_release_glz(dcc);
dcc_palette_cache_reset(dcc);
free(dcc->send_data.stream_outbuf);
free(dcc->send_data.free_list.res);
@@ -5067,11 +5067,11 @@ static void red_freeze_glz(DisplayChannelClient *dcc)
}
/* destroy encoder, and dictionary if no one uses it*/
-static void red_release_glz(DisplayChannelClient *dcc)
+static void dcc_release_glz(DisplayChannelClient *dcc)
{
GlzSharedDictionary *shared_dict;
- red_display_client_clear_glz_drawables(dcc);
+ dcc_free_glz_drawables(dcc);
glz_encoder_destroy(dcc->glz);
dcc->glz = NULL;
@@ -5993,7 +5993,7 @@ void display_channel_destroy_surfaces(DisplayChannel *display)
red_pipes_add_verb(RED_CHANNEL(display), SPICE_MSG_DISPLAY_STREAM_DESTROY_ALL);
}
- red_display_clear_glz_drawables(display);
+ display_channel_free_glz_drawables(display);
}
static void handle_dev_destroy_surfaces(void *opaque, void *payload)
@@ -6151,9 +6151,12 @@ static void handle_dev_stop(void *opaque, void *payload)
spice_info("stop");
spice_assert(worker->running);
+
worker->running = FALSE;
- red_display_clear_glz_drawables(worker->display_channel);
+
+ display_channel_free_glz_drawables(worker->display_channel);
display_channel_flush_all_surfaces(worker->display_channel);
+
/* todo: when the waiting is expected to take long (slow connection and
* overloaded pipe), don't wait, and in case of migration,
* purge the pipe, send destroy_all_surfaces