[PATCH] Properly restore SIGCHLD if X startup fails

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Before starting X we set up a SIGCHLD handler to raise OSError if
Xorg dies. But if that happens, we'll skip over the code that
restores the old SIGCHLD handler, and thus the next subprocess we
run will cause anaconda to catch OSError and die.

This patch moves the signal restore code into a finally: block.
---
 anaconda |    8 ++++----
 1 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/anaconda b/anaconda
index bc5ed45..5e8d6ce 100755
--- a/anaconda
+++ b/anaconda
@@ -833,9 +833,9 @@ if __name__ == "__main__":
 	    def preexec_fn():
 		signal.signal(signal.SIGUSR1, signal.SIG_IGN)
 
-            xout = open("/dev/tty5", "w")
 	    old_sigusr1 = signal.signal(signal.SIGUSR1, sigusr1_handler)
 	    old_sigchld = signal.signal(signal.SIGCHLD, sigchld_handler)
+            xout = open("/dev/tty5", "w")
 
             proc = subprocess.Popen(["Xorg", "-br", "-logfile", "/tmp/X.log",
 				     ":1", "vt6", "-s", "1440", "-ac",
@@ -845,9 +845,6 @@ if __name__ == "__main__":
 
 	    signal.pause()
 
-	    signal.signal(signal.SIGUSR1, old_sigusr1)
-	    signal.signal(signal.SIGCHLD, old_sigchld)
-
             os.environ["DISPLAY"] = ":1"
             doStartupX11Actions(opts.runres)
             xserver_pid = proc.pid
@@ -856,6 +853,9 @@ if __name__ == "__main__":
             opts.display_mode = 't'
             graphical_failed = 1
             time.sleep(2)
+        finally:
+	    signal.signal(signal.SIGUSR1, old_sigusr1)
+	    signal.signal(signal.SIGCHLD, old_sigchld)
 
     if opts.display_mode == 't' and graphical_failed and not anaconda.isKickstart:
         ret = vnc.askVncWindow()
-- 
1.6.2.2

_______________________________________________
Anaconda-devel-list mailing list
Anaconda-devel-list@xxxxxxxxxx
https://www.redhat.com/mailman/listinfo/anaconda-devel-list

[Index of Archives]     [Kickstart]     [Fedora Users]     [Fedora Legacy List]     [Fedora Maintainers]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [Yosemite Photos]     [KDE Users]     [Fedora Tools]
  Powered by Linux