mirror of
https://gitlab.uni-freiburg.de/opensourcevdi/spice
synced 2026-01-12 17:41:18 +00:00
client: display channel - destroy all surfaces on disconnect
Fix not destroying surfaces and other data (e.g., streams) upon disconnection.
(cherry picked from commit 010b22cd77 branch 0.8)
This commit is contained in:
parent
00ff038cc9
commit
3a1473760c
@ -1045,9 +1045,7 @@ void DisplayChannel::on_disconnect()
|
||||
_surfaces_cache[0]->clear();
|
||||
}
|
||||
|
||||
if (screen()) {
|
||||
screen()->set_update_interrupt_trigger(NULL);
|
||||
}
|
||||
clear();
|
||||
|
||||
AutoRef<DetachChannelsEvent> detach_channels(new DetachChannelsEvent(*this));
|
||||
get_client().push_event(*detach_channels);
|
||||
@ -1056,7 +1054,6 @@ void DisplayChannel::on_disconnect()
|
||||
get_client().push_event(*unlock_event);
|
||||
detach_from_screen(get_client().get_application());
|
||||
}
|
||||
get_client().deactivate_interval_timer(*_streams_timer);
|
||||
AutoRef<SyncEvent> sync_event(new SyncEvent());
|
||||
get_client().push_event(*sync_event);
|
||||
(*sync_event)->wait();
|
||||
@ -1112,7 +1109,7 @@ void DisplayChannel::destroy_off_screen_surfaces()
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayChannel::on_disconnect_mig_src()
|
||||
void DisplayChannel::clear(bool destroy_primary)
|
||||
{
|
||||
_palette_cache.clear();
|
||||
destroy_streams();
|
||||
@ -1122,7 +1119,16 @@ void DisplayChannel::on_disconnect_mig_src()
|
||||
_update_mark = 0;
|
||||
_next_timer_time = 0;
|
||||
get_client().deactivate_interval_timer(*_streams_timer);
|
||||
destroy_off_screen_surfaces();
|
||||
if (destroy_primary) {
|
||||
destroy_all_surfaces();
|
||||
} else {
|
||||
destroy_off_screen_surfaces();
|
||||
}
|
||||
}
|
||||
|
||||
void DisplayChannel::on_disconnect_mig_src()
|
||||
{
|
||||
clear(false);
|
||||
// Not clrearing the primary surface till we receive a new one (or a timeout).
|
||||
if (_surfaces_cache.exist(0)) {
|
||||
AutoRef<MigPrimarySurfaceTimer> mig_timer(new MigPrimarySurfaceTimer());
|
||||
|
||||
@ -179,6 +179,7 @@ private:
|
||||
void activate_streams_timer();
|
||||
void stream_update_request(uint32_t update_time);
|
||||
void reset_screen();
|
||||
void clear(bool destroy_primary = true);
|
||||
|
||||
static void set_clip_rects(const SpiceClip& clip, uint32_t& num_clip_rects, SpiceRect*& clip_rects);
|
||||
|
||||
|
||||
Loading…
Reference in New Issue
Block a user