diff options
author | CoprDistGit <infra@openeuler.org> | 2023-09-07 02:39:49 +0000 |
---|---|---|
committer | CoprDistGit <infra@openeuler.org> | 2023-09-07 02:39:49 +0000 |
commit | de59f11fd8011f50c728c58e580f9179ff39ff08 (patch) | |
tree | 6f65e5074bcdaa31148a6155389bd80ea017ebdb /0001-session-vnc-Don-t-requeue-close-session-idle.patch | |
parent | f346c7556388955b1fb61cd933f725756d2cde48 (diff) |
automatic import of gnome-remote-desktopopeneuler20.03_LTS_SP1
Diffstat (limited to '0001-session-vnc-Don-t-requeue-close-session-idle.patch')
-rw-r--r-- | 0001-session-vnc-Don-t-requeue-close-session-idle.patch | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/0001-session-vnc-Don-t-requeue-close-session-idle.patch b/0001-session-vnc-Don-t-requeue-close-session-idle.patch new file mode 100644 index 0000000..20a3f56 --- /dev/null +++ b/0001-session-vnc-Don-t-requeue-close-session-idle.patch @@ -0,0 +1,84 @@ +From add0ea34fd1d6835c99aebeb4e56b805b38e53ec Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com> +Date: Mon, 1 Oct 2018 18:02:39 +0200 +Subject: [PATCH 1/2] session/vnc: Don't requeue close session idle + +If being closed due to a PipeWire error, RFB will still process state +and invoke callbacks when cleaning up the RFB screen, meaning we'd +requeue the close session idle handler. Avoid this by avoiding +requeueing if there is already one queued, and don't mark is as unqueued +until after actually stopping the session. +--- + src/grd-session-vnc.c | 28 ++++++++++++++++++---------- + 1 file changed, 18 insertions(+), 10 deletions(-) + +diff --git a/src/grd-session-vnc.c b/src/grd-session-vnc.c +index ce4dd29..3c98eeb 100644 +--- a/src/grd-session-vnc.c ++++ b/src/grd-session-vnc.c +@@ -165,6 +165,16 @@ grd_session_vnc_draw_buffer (GrdSessionVnc *session_vnc, + rfbProcessEvents (session_vnc->rfb_screen, 0); + } + ++static void ++maybe_queue_close_session_idle (GrdSessionVnc *session_vnc) ++{ ++ if (session_vnc->close_session_idle_id) ++ return; ++ ++ session_vnc->close_session_idle_id = ++ g_idle_add (close_session_idle, session_vnc); ++} ++ + static void + handle_client_gone (rfbClientPtr rfb_client) + { +@@ -172,8 +182,7 @@ handle_client_gone (rfbClientPtr rfb_client) + + g_debug ("VNC client gone"); + +- session_vnc->close_session_idle_id = +- g_idle_add (close_session_idle, session_vnc); ++ maybe_queue_close_session_idle (session_vnc); + } + + static void +@@ -670,12 +679,6 @@ grd_session_vnc_stop (GrdSession *session) + + g_debug ("Stopping VNC session"); + +- if (session_vnc->close_session_idle_id) +- { +- g_source_remove (session_vnc->close_session_idle_id); +- session_vnc->close_session_idle_id = 0; +- } +- + g_clear_object (&session_vnc->pipewire_stream); + + grd_session_vnc_detach_source (session_vnc); +@@ -683,6 +686,12 @@ grd_session_vnc_stop (GrdSession *session) + g_clear_object (&session_vnc->connection); + g_clear_pointer (&session_vnc->rfb_screen->frameBuffer, g_free); + g_clear_pointer (&session_vnc->rfb_screen, (GDestroyNotify) rfbScreenCleanup); ++ ++ if (session_vnc->close_session_idle_id) ++ { ++ g_source_remove (session_vnc->close_session_idle_id); ++ session_vnc->close_session_idle_id = 0; ++ } + } + + static gboolean +@@ -703,8 +712,7 @@ on_pipwire_stream_closed (GrdVncPipeWireStream *stream, + { + g_warning ("PipeWire stream closed, closing client"); + +- session_vnc->close_session_idle_id = +- g_idle_add (close_session_idle, session_vnc); ++ maybe_queue_close_session_idle (session_vnc); + } + + static void +-- +2.17.1 + |