summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Cameron <brian.cameron@sun.com>2007-10-03 18:57:23 +0000
committerBrian Cameron <bcameron@src.gnome.org>2007-10-03 18:57:23 +0000
commit6541a7437211bcea22602fdb47586bbad376f4ec (patch)
tree003621a35016f3d20faea677064885250af2b23f
parentb265522fba52bde3fbf44a8b9d8c677f32755cdc (diff)
downloadgdm-PRE_SWITCH_TO_GOBJECT_BRANCH.tar.gz
Decrease num_sessions when appropriate. Otherwise GDM incorrectly thinksPRE_SWITCH_TO_GOBJECT_BRANCH
2007-10-03 Brian Cameron <brian.cameron@sun.com> * daemon/gdm-xdmcp-manager.c: Decrease num_sessions when appropriate. Otherwise GDM incorrectly thinks the maximum number of XDMCP connections has been reached. Fixes bug #478441. Patch by Francis Giraldeau <francis.giraldeau@revolutionlinux.com>. svn path=/trunk/; revision=5336
-rw-r--r--ChangeLog9
-rw-r--r--daemon/gdm-xdmcp-manager.c33
2 files changed, 30 insertions, 12 deletions
diff --git a/ChangeLog b/ChangeLog
index 4b9238d2..73db45ff 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,10 @@
+2007-10-03 Brian Cameron <brian.cameron@sun.com>
+
+ * daemon/gdm-xdmcp-manager.c: Decrease num_sessions when appropriate.
+ Otherwise GDM incorrectly thinks the maximum number of XDMCP
+ connections has been reached. Fixes bug #478441. Patch by Francis
+ Giraldeau <francis.giraldeau@revolutionlinux.com>.
+
2007-09-28 Brian Cameron <brian.cameron@sun.com>
* gui/gdmlogin.c, gui/greeter/greeter.c: Send a response before
@@ -9,7 +16,7 @@
* gui/gdmXnestchooser.c, gui/gdmsetup.c: Turn off debug message
logging. Fixes bug #478318.
-2007-09-21 Dave Fincher <finchair@yahoo.com>^M
+2007-09-21 Dave Fincher <finchair@yahoo.com>
Fixes bug #478805.
* gui/greeter/themes/happygnome/happygnome-list.xml: Updated
diff --git a/daemon/gdm-xdmcp-manager.c b/daemon/gdm-xdmcp-manager.c
index 8bd78ec5..b11fcff5 100644
--- a/daemon/gdm-xdmcp-manager.c
+++ b/daemon/gdm-xdmcp-manager.c
@@ -1533,20 +1533,12 @@ gdm_xdmcp_recount_sessions (GdmXdmcpManager *manager)
}
static void
-do_dispose (GdmXdmcpManager *manager,
- GdmDisplay *d)
-{
-
- gdm_display_dispose (d);
- gdm_xdmcp_recount_sessions (manager);
-}
-
-static void
gdm_xdmcp_displays_purge (GdmXdmcpManager *manager)
{
GSList *dlist;
time_t curtime = time (NULL);
GSList *displays;
+ gboolean sess_dirty = FALSE;
displays = gdm_daemon_config_get_display_list ();
@@ -1560,7 +1552,8 @@ gdm_xdmcp_displays_purge (GdmXdmcpManager *manager)
curtime > d->acctime + manager->priv->max_wait) {
g_debug ("gdm_xdmcp_displays_purge: Disposing session id %ld",
(long)d->sessionid);
- do_dispose (manager, d);
+ gdm_display_dispose (d);
+ sess_dirty = TRUE;
/* restart as the list is now broken */
dlist = displays;
@@ -1569,6 +1562,11 @@ gdm_xdmcp_displays_purge (GdmXdmcpManager *manager)
dlist = dlist->next;
}
}
+
+ /* Recount sessions only if dirty */
+ if (sess_dirty) {
+ gdm_xdmcp_recount_sessions (manager);
+ }
}
static void
@@ -1578,6 +1576,7 @@ gdm_xdmcp_display_dispose_check (GdmXdmcpManager *manager,
{
GSList *dlist;
GSList *displays;
+ gboolean sess_dirty = FALSE;
if (hostname == NULL) {
return;
@@ -1599,7 +1598,8 @@ gdm_xdmcp_display_dispose_check (GdmXdmcpManager *manager,
if (d->dispstat == XDMCP_MANAGED) {
gdm_display_unmanage (d);
} else {
- do_dispose (manager, d);
+ gdm_display_dispose (d);
+ sess_dirty = TRUE;
}
/* restart as the list is now broken */
@@ -1609,6 +1609,11 @@ gdm_xdmcp_display_dispose_check (GdmXdmcpManager *manager,
dlist = dlist->next;
}
}
+
+ /* Recount sessions only if dirty */
+ if (sess_dirty) {
+ gdm_xdmcp_recount_sessions (manager);
+ }
}
static void
@@ -1845,6 +1850,12 @@ gdm_xdmcp_handle_request (GdmXdmcpManager *manager,
gdm_xdmcp_displays_purge (manager); /* Purge pending displays */
+ /* Update num_sessions only if the length of the list that contain
+ * them is smaller */
+ if (g_list_length (gdm_daemon_config_get_display_list()) < manager->priv->num_sessions ){
+ gdm_xdmcp_recount_sessions (manager);
+ }
+
/* Remote display number */
if G_UNLIKELY (! XdmcpReadCARD16 (&manager->priv->buf, &clnt_dspnum)) {
g_warning (_("%s: Could not read Display Number"),