File 0013-throttler-Allow-overriding-hard-coded-parallel-conne.patch of Package gnome-remote-desktop
From 0af092962ecadcff3e06d595fa9607395b412761 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Jonas=20=C3=85dahl?= <jadahl@gmail.com>
Date: Mon, 30 Jun 2025 16:01:37 +0200
Subject: [PATCH 13/13] throttler: Allow overriding hard coded parallel
connections limit
Overriding is done via an argument passed to the daemon. This allows
using the same daemon with a larger amount of users, which one would
achieve by overriding the relevant systemd service file by both adding
the --max-parallel-connections argument, as well as bumping the limit of
number of open file descriptors to something adequate.
Part-of: <https://gitlab.gnome.org/GNOME/gnome-remote-desktop/-/merge_requests/321>
---
src/grd-daemon.c | 24 ++++++++++++++++++++++++
src/grd-rdp-server.c | 7 ++++---
src/grd-settings.c | 19 +++++++++++++++++++
src/grd-settings.h | 5 +++++
src/grd-throttler.c | 9 ++++++---
src/grd-throttler.h | 4 +++-
src/grd-vnc-server.c | 20 +++++++++++---------
7 files changed, 72 insertions(+), 16 deletions(-)
diff -urp gnome-remote-desktop-45.1.orig/src/grd-daemon.c gnome-remote-desktop-45.1/src/grd-daemon.c
--- gnome-remote-desktop-45.1.orig/src/grd-daemon.c 2026-02-10 19:58:09.528037014 -0600
+++ gnome-remote-desktop-45.1/src/grd-daemon.c 2026-02-10 20:51:56.833218014 -0600
@@ -46,6 +46,8 @@ enum
PROP_CONTEXT,
};
+#define DEFAULT_MAX_PARALLEL_CONNECTIONS 10
+
enum
{
MUTTER_PROXY_ACQUIRED,
@@ -86,6 +88,9 @@ grd_daemon_get_context (GrdDaemon *daemo
return priv->context;
}
+#define QUOTE1(a) #a
+#define QUOTE(a) QUOTE1(a)
+
#ifdef HAVE_RDP
static void
stop_rdp_server (GrdDaemon *daemon)
@@ -592,6 +597,7 @@ main (int argc, char **argv)
gboolean headless = FALSE;
int rdp_port = -1;
int vnc_port = -1;
+ int max_parallel_connections = DEFAULT_MAX_PARALLEL_CONNECTIONS;
GOptionEntry entries[] = {
{ "version", 0, 0, G_OPTION_ARG_NONE, &print_version,
@@ -602,6 +608,10 @@ main (int argc, char **argv)
"RDP port", NULL },
{ "vnc-port", 0, 0, G_OPTION_ARG_INT, &vnc_port,
"VNC port", NULL },
+ { "max-parallel-connections", 0, 0,
+ G_OPTION_ARG_INT, &max_parallel_connections,
+ "Max number of parallel connections (0 for unlimited, "
+ "default: " QUOTE(DEFAULT_MAX_PARALLEL_CONNECTIONS) ")", NULL },
{ NULL }
};
g_autoptr (GOptionContext) option_context = NULL;
@@ -625,6 +635,17 @@ main (int argc, char **argv)
return EXIT_SUCCESS;
}
+ if (max_parallel_connections == 0)
+ {
+ max_parallel_connections = INT_MAX;
+ }
+ else if (max_parallel_connections < 0)
+ {
+ g_printerr ("Invalid number of max parallel connections: %d\n",
+ max_parallel_connections);
+ return EXIT_FAILURE;
+ }
+
if (headless)
runtime_mode = GRD_RUNTIME_MODE_HEADLESS;
else
@@ -654,5 +675,8 @@ main (int argc, char **argv)
if (vnc_port != -1)
grd_settings_override_vnc_port (settings, vnc_port);
+ grd_settings_override_max_parallel_connections (settings,
+ max_parallel_connections);
+
return g_application_run (G_APPLICATION (daemon), argc, argv);
}
diff -urp gnome-remote-desktop-45.1.orig/src/grd-settings.c gnome-remote-desktop-45.1/src/grd-settings.c
--- gnome-remote-desktop-45.1.orig/src/grd-settings.c 2026-02-10 19:57:07.926874309 -0600
+++ gnome-remote-desktop-45.1/src/grd-settings.c 2026-02-10 20:51:56.836375100 -0600
@@ -47,6 +47,8 @@ typedef struct _GrdSettingsPrivate
struct {
int port;
} vnc;
+
+ int max_parallel_connections;
} GrdSettingsPrivate;
G_DEFINE_TYPE_WITH_PRIVATE (GrdSettings, grd_settings, G_TYPE_OBJECT)
@@ -68,6 +70,23 @@ grd_settings_get_vnc_port (GrdSettings *
}
void
+grd_settings_override_max_parallel_connections (GrdSettings *settings,
+ int max_parallel_connections)
+{
+ GrdSettingsPrivate *priv = grd_settings_get_instance_private (settings);
+
+ priv->max_parallel_connections = max_parallel_connections;
+}
+
+int
+grd_settings_get_max_parallel_connections (GrdSettings *settings)
+{
+ GrdSettingsPrivate *priv = grd_settings_get_instance_private (settings);
+
+ return priv->max_parallel_connections;
+}
+
+void
grd_settings_override_rdp_port (GrdSettings *settings,
int port)
{
diff -urp gnome-remote-desktop-45.1.orig/src/grd-settings.h gnome-remote-desktop-45.1/src/grd-settings.h
--- gnome-remote-desktop-45.1.orig/src/grd-settings.h 2026-02-10 19:57:07.926874309 -0600
+++ gnome-remote-desktop-45.1/src/grd-settings.h 2026-02-10 20:51:56.836831314 -0600
@@ -62,6 +62,11 @@ int grd_settings_get_rdp_port (GrdSettin
int grd_settings_get_vnc_port (GrdSettings *settings);
+void grd_settings_override_max_parallel_connections (GrdSettings *settings,
+ int max_parallel_connections);
+
+int grd_settings_get_max_parallel_connections (GrdSettings *settings);
+
void grd_settings_override_rdp_port (GrdSettings *settings,
int port);
diff -urp gnome-remote-desktop-45.1.orig/src/grd-throttler.c gnome-remote-desktop-45.1/src/grd-throttler.c
--- gnome-remote-desktop-45.1.orig/src/grd-throttler.c 2026-02-10 20:49:36.543489260 -0600
+++ gnome-remote-desktop-45.1/src/grd-throttler.c 2026-02-10 20:51:56.837376277 -0600
@@ -21,9 +21,10 @@
#include "grd-throttler.h"
+#include "grd-context.h"
+#include "grd-settings.h"
#include "grd-utils.h"
-#define DEFAULT_MAX_GLOBAL_CONNECTIONS 10
#define DEFAULT_MAX_CONNECTIONS_PER_PEER 5
#define DEFAULT_MAX_PENDING_CONNECTIONS 5
#define DEFAULT_MAX_ATTEMPTS_PER_SECOND 10
@@ -440,12 +441,14 @@ grd_throttler_limits_set_max_global_conn
}
GrdThrottlerLimits *
-grd_throttler_limits_new (void)
+grd_throttler_limits_new (GrdContext *context)
{
+ GrdSettings *settings = grd_context_get_settings (context);
GrdThrottlerLimits *limits;
limits = g_new0 (GrdThrottlerLimits, 1);
- limits->max_global_connections = DEFAULT_MAX_GLOBAL_CONNECTIONS;
+ limits->max_global_connections =
+ grd_settings_get_max_parallel_connections (settings);
limits->max_connections_per_peer = DEFAULT_MAX_CONNECTIONS_PER_PEER;
limits->max_pending_connections = DEFAULT_MAX_PENDING_CONNECTIONS;
limits->max_attempts_per_second = DEFAULT_MAX_ATTEMPTS_PER_SECOND;
diff -urp gnome-remote-desktop-45.1.orig/src/grd-throttler.h gnome-remote-desktop-45.1/src/grd-throttler.h
--- gnome-remote-desktop-45.1.orig/src/grd-throttler.h 2026-02-10 20:49:36.544225004 -0600
+++ gnome-remote-desktop-45.1/src/grd-throttler.h 2026-02-10 20:51:56.837935617 -0600
@@ -23,6 +23,8 @@
#include <gio/gio.h>
#include <glib-object.h>
+#include "grd-types.h"
+
typedef struct _GrdThrottlerLimits GrdThrottlerLimits;
#define GRD_TYPE_THROTTLER (grd_throttler_get_type())
@@ -41,7 +43,7 @@ grd_throttler_limits_set_max_global_conn
int limit);
GrdThrottlerLimits *
-grd_throttler_limits_new (void);
+grd_throttler_limits_new (GrdContext *context);
GrdThrottler *
grd_throttler_new (GrdThrottlerLimits *limits,
diff -urp gnome-remote-desktop-45.1.orig/src/grd-vnc-server.c gnome-remote-desktop-45.1/src/grd-vnc-server.c
--- gnome-remote-desktop-45.1.orig/src/grd-vnc-server.c 2026-02-10 20:51:19.185815195 -0600
+++ gnome-remote-desktop-45.1/src/grd-vnc-server.c 2026-02-10 20:51:56.838335505 -0600
@@ -229,26 +229,28 @@ grd_vnc_server_dispose (GObject *object)
static void
grd_vnc_server_constructed (GObject *object)
{
+ GrdVncServer *vnc_server = GRD_VNC_SERVER (object);
+ GrdThrottlerLimits *limits;
+
if (grd_get_debug_flags () & GRD_DEBUG_VNC)
rfbLogEnable (1);
else
rfbLogEnable (0);
- G_OBJECT_CLASS (grd_vnc_server_parent_class)->constructed (object);
-}
-
-static void
-grd_vnc_server_init (GrdVncServer *vnc_server)
-{
- GrdThrottlerLimits *limits;
-
- limits = grd_throttler_limits_new ();
+ limits = grd_throttler_limits_new (vnc_server->context);
/* TODO: Add the rfbScreen instance to GrdVncServer to support multiple
* sessions. */
grd_throttler_limits_set_max_global_connections (limits, 1);
vnc_server->throttler = grd_throttler_new (limits,
allow_connection_cb,
vnc_server);
+
+ G_OBJECT_CLASS (grd_vnc_server_parent_class)->constructed (object);
+}
+
+static void
+grd_vnc_server_init (GrdVncServer *vnc_server)
+{
}
static void