[X2Go-Commits] [nx-libs] 79/429: Handlers.c: ensure regular yields if suspended

git-admin at x2go.org git-admin at x2go.org
Mon Oct 18 09:36:09 CEST 2021


This is an automated email from the git hooks/post-receive script.

x2go pushed a commit to branch 3.6.x
in repository nx-libs.

commit e7d5ba4e5a5394633dbd3ce5a3fd5314309bc641
Author: Ulrich Sibiller <uli42 at gmx.de>
Date:   Wed Dec 30 14:36:23 2020 +0100

    Handlers.c: ensure regular yields if suspended
    
    Fixes ArcticaProject/nx-libs#903
---
 nx-X11/programs/Xserver/hw/nxagent/Handlers.c | 23 ++++++++++++++++++++++-
 1 file changed, 22 insertions(+), 1 deletion(-)

diff --git a/nx-X11/programs/Xserver/hw/nxagent/Handlers.c b/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
index 9f0a3c9d9..62974b9c1 100644
--- a/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
+++ b/nx-X11/programs/Xserver/hw/nxagent/Handlers.c
@@ -1070,7 +1070,28 @@ void nxagentDispatchHandler(ClientPtr client, int in, int out)
      * into the inner dispatch loop forever.
      */
 
-    if (!SmartScheduleSignalEnable)
+    /*
+     * The behaviour described in the comment above also happens with the
+     * smart scheduler if all of the following conditions are met:
+     * - the agent is suspended
+     * - SleepTimeMillis is set (the default is sufficient to trigger this)
+     * - a client is doing a lot of image operations
+     * - nxagentShadowCounter is 0
+     * In that case the agent will slow down the image operations by calling
+     * an intermediate sleep resulting in the client's request queue never
+     * being empty. Which in turn leads to the drain loop described above.
+     * isItTimeToYield will then never be set. The (dramatic) result of this
+     * is that nxagent will not process any signals and therefore cannot be
+     * resumed anymore!
+     * For this reason we do not limit below code to the dumb scheduler but also
+     * run it if above conditions are met - ensuring regular yields.
+     * See issue #903
+     */
+
+    if (!SmartScheduleSignalEnable ||
+	    (nxagentShadowCounter == 0 &&
+	         NXDisplayError(nxagentDisplay) == 1 &&
+	             nxagentOption(SleepTimeMillis) > 0))
     {
       if  (client -> index != nxagentDispatch.client)
       {

--
Alioth's /home/x2go-admin/maintenancescripts/git/hooks/post-receive-email on /srv/git/code.x2go.org/nx-libs.git


More information about the x2go-commits mailing list