diff options
author | Brian Cameron <brian.cameron@sun.com> | 2007-10-03 18:57:23 +0000 |
---|---|---|
committer | Brian Cameron <bcameron@src.gnome.org> | 2007-10-03 18:57:23 +0000 |
commit | 6541a7437211bcea22602fdb47586bbad376f4ec (patch) | |
tree | 003621a35016f3d20faea677064885250af2b23f | |
parent | b265522fba52bde3fbf44a8b9d8c677f32755cdc (diff) | |
download | gdm-6541a7437211bcea22602fdb47586bbad376f4ec.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-- | ChangeLog | 9 | ||||
-rw-r--r-- | daemon/gdm-xdmcp-manager.c | 33 |
2 files changed, 30 insertions, 12 deletions
@@ -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"), |