backend-rdp: disconnect and free peers on compositor shutdown
authorStefan Agner <stefan@agner.ch>
Thu, 20 Jun 2019 15:39:36 +0000 (17:39 +0200)
committerSimon Ser <contact@emersion.fr>
Mon, 13 Jan 2020 14:22:30 +0000 (14:22 +0000)
Properly disconnect and free all RDP peers on compositor shutdown.
This makes sure that all events are disabled, which should avoid
any race conditions with pending events.

Signed-off-by: Stefan Agner <stefan@agner.ch>
libweston/backend-rdp/rdp.c

index d21d52834e8715c7fb429e90dc2505d9fb936dc8..376ff0de4bc61b29a94c96cff2001ea8382fd886 100644 (file)
@@ -663,8 +663,17 @@ rdp_destroy(struct weston_compositor *ec)
 {
        struct rdp_backend *b = to_rdp_backend(ec);
        struct weston_head *base, *next;
+       struct rdp_peers_item *rdp_peer, *tmp;
        int i;
 
+       wl_list_for_each_safe(rdp_peer, tmp, &b->output->peers, link) {
+               freerdp_peer* client = rdp_peer->peer;
+
+               client->Disconnect(client);
+               freerdp_peer_context_free(client);
+               freerdp_peer_free(client);
+       }
+
        for (i = 0; i < MAX_FREERDP_FDS; i++)
                if (b->listener_events[i])
                        wl_event_source_remove(b->listener_events[i]);