Control: tags -1 + patch First, I verified that the bug is not present in vanilla GDM3. It is introduced by the patches about transient displays and switch_on_finish property.
More precisely, the problem is introduced by 21_static_display_purge.patch. In the "finish" method of GdmStaticDisplay, this patch adds a call to the "finish" method of the parent. The latter parent method changes the status of the display to the FINISHED state, which in turn triggers a reset of the number of failures and spawns a new display. The problem is that the FINISHED state is reached before the FAILED state. I could verify that the attached patch fixes the problem. And it is rather clear that the patch does not affect the behavior when the X server does not fail. joss: Are you ok with this patch? Moreover, do you think it should be added as a separate quilt patch, or merged into 21_static_display_purge.patch? -- .''`. Sébastien Villemot : :' : Debian Developer `. `' http://www.dynare.org/sebastien `- GPG Key: 4096R/381A7594
--- a/daemon/gdm-local-display-factory.c +++ b/daemon/gdm-local-display-factory.c @@ -326,10 +326,8 @@ so that it may be reused */ g_hash_table_remove (factory->priv->displays, GUINT_TO_POINTER (num)); gdm_display_store_remove (store, display); - /* reset num failures */ - factory->priv->num_failures = 0; - if (switch_on_finish) { + if (switch_on_finish && factory->priv->num_failures <= MAX_DISPLAY_FAILURES) { switch_to_login_session (factory); } break; @@ -348,6 +346,8 @@ } break; case GDM_DISPLAY_UNMANAGED: + /* reset num failures */ + factory->priv->num_failures = 0; break; case GDM_DISPLAY_PREPARED: break;
signature.asc
Description: This is a digitally signed message part