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

signalling problems during X/wm startup


Rawhide (and possibly other versions too) anaconda has race conditions when starting X. We fire up X.org binary and go into signal.pause(), waiting for either SIGUSR1 from X when it is started or SIGCHLD if it terminated with an error. The problem is: before this branch of code even begins anaconda has forked() itself and me might see many more SIGCHLD signals coming from these non-X processes. If that happens, the code responsible for starting X assumes X has failed (though it has not) and switches for text install.

There's many more similar scenarios depending on when exactly is SIGCHLD delivered. For instance if SIGUSR arrives and resumes the signal.pause and then immediately SIGCHLD arrives, it messes up startup of the window manager that was going on after startup of X. Typically it hits the os.read() bit when main anaconda is watching the pipe with mini-wm. This raises an WhateverSystemCallInterrupted exception and kills anaconda. But there are endlessly more possibilities, the beauty of concurrency lies in its lack of determinism.

Nonetheless, I seem to be the only one person running into this, maybe it's because I test on a specific vmware server that gives me a unique timing to trigger these problems. I am attaching a fix which specifically forks the offending children into orphans. If similar bugs start showing up more often we will perhaps need to change the X startup mechanism (I am not sure how though).


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