summaryrefslogtreecommitdiffstats
path: root/ubuntu/maverick/kdebase/debian/patches/kubuntu_9921_kdm_bulletproof_x.diff
diff options
context:
space:
mode:
Diffstat (limited to 'ubuntu/maverick/kdebase/debian/patches/kubuntu_9921_kdm_bulletproof_x.diff')
-rw-r--r--ubuntu/maverick/kdebase/debian/patches/kubuntu_9921_kdm_bulletproof_x.diff64
1 files changed, 64 insertions, 0 deletions
diff --git a/ubuntu/maverick/kdebase/debian/patches/kubuntu_9921_kdm_bulletproof_x.diff b/ubuntu/maverick/kdebase/debian/patches/kubuntu_9921_kdm_bulletproof_x.diff
new file mode 100644
index 000000000..4aad9f8e3
--- /dev/null
+++ b/ubuntu/maverick/kdebase/debian/patches/kubuntu_9921_kdm_bulletproof_x.diff
@@ -0,0 +1,64 @@
+--- kdebase-3.5.8/kdm/backend/dm.c 2008-02-13 23:59:17.000000000 +0200
++++ kdebase-3.5.8/kdm/backend/dm.c 2008-02-14 11:22:41.000000000 +0200
+@@ -996,9 +996,14 @@ ReapChildren( void )
+ /* don't kill again */
+ break;
+ case running:
+- if (startingServer == d && d->serverStatus != ignore) {
+- if (d->serverStatus == starting && waitCode( status ) != 47)
+- LogError( "X server died during startup\n" );
++ LogError("X server terminated: [%d, %d, %d]\n",
++ (startingServer == d),
++ (d->serverStatus),
++ (waitCode(status)));
++
++ if (startingServer == d /*&& d->serverStatus != ignore*/) {
++ if (/*d->serverStatus == starting &&*/ waitCode( status ) != 47)
++ LogError( "X server died during startup\n" );
+ StartServerFailed();
+ break;
+ }
+--- kdebase-3.5.8/kdm/backend/server.c 2008-02-13 23:59:17.000000000 +0200
++++ kdebase-3.5.8/kdm/backend/server.c 2008-02-14 11:41:20.000000000 +0200
+@@ -48,6 +48,10 @@ from the copyright holder.
+ struct display *startingServer;
+ time_t serverTimeout = TO_INF;
+
++#define SERVER_ATTEMPTS 3
++
++char* failsafeXServer[] = {"/etc/gdm/failsafeXServer", 0};
++
+ char **
+ PrepServerArgv( struct display *d, const char *args )
+ {
+@@ -128,6 +132,7 @@ StartServer( struct display *d )
+ {
+ startingServer = d;
+ d->startTries = 0;
++ d->serverAttempts = SERVER_ATTEMPTS;
+ StartServerOnce();
+ }
+
+@@ -150,6 +155,7 @@ void
+ StartServerSuccess()
+ {
+ struct display *d = startingServer;
++ LogError("StartServerSucces\n");
+ d->serverStatus = ignore;
+ serverTimeout = TO_INF;
+ Debug( "X server ready, starting session\n" );
+@@ -161,9 +167,14 @@ StartServerFailed()
+ {
+ struct display *d = startingServer;
+ if (!d->serverAttempts || d->startTries < d->serverAttempts) {
++ LogError("Failed to start X server. Starting failsafe X server.\n");
++
++ runAndWait(failsafeXServer, 0);
++
+ d->serverStatus = pausing;
+ serverTimeout = d->openDelay + now;
+ } else {
++ LogError("StartServerFailed\n");
+ d->serverStatus = ignore;
+ serverTimeout = TO_INF;
+ startingServer = 0;