Prevent tdm crash if window manager or compositor do not start

(cherry picked from commit 8a80c7f3df)
v3.5.13-sru
Timothy Pearson 12 years ago committed by Slávek Banko
parent e85de28ed2
commit 2873e76d92

@ -452,33 +452,37 @@ kg_main( const char *argv0 )
KGVerify::done();
if (comp) {
if (_compositor == "kompmgr") {
// Change process UID
// Get user UID
passwd* userinfo = getpwnam(login_user.ascii());
if (userinfo) {
TQString newuid = TQString("%1").arg(userinfo->pw_uid);
// kompmgr allows us to change its uid in this manner:
// 1.) Send SIGUSER1
// 2.) Send the new UID to it on the command line
comp->kill(SIGUSR1);
comp->writeStdin(newuid.ascii(), newuid.length());
usleep(50000); // Give the above function some time to execute. Note that on REALLY slow systems this could fail, leaving kompmgr running as root. TODO: Look into ways to make this more robust.
if (comp->isRunning()) {
if (_compositor == "kompmgr") {
// Change process UID
// Get user UID
passwd* userinfo = getpwnam(login_user.ascii());
if (userinfo) {
TQString newuid = TQString("%1").arg(userinfo->pw_uid);
// kompmgr allows us to change its uid in this manner:
// 1.) Send SIGUSER1
// 2.) Send the new UID to it on the command line
comp->kill(SIGUSR1);
comp->writeStdin(newuid.ascii(), newuid.length());
usleep(50000); // Give the above function some time to execute. Note that on REALLY slow systems this could fail, leaving kompmgr running as root. TODO: Look into ways to make this more robust.
}
}
comp->closeStdin();
comp->detach();
}
comp->closeStdin();
comp->detach();
delete comp;
}
if (kwin) {
if (login_session_wm.endsWith("/startkde") || (login_session_wm == "failsafe")) {
kwin->closeStdin();
kwin->detach();
dcop->detach();
}
else {
kwin->kill();
dcop->kill();
if (kwin->isRunning()) {
if (login_session_wm.endsWith("/startkde") || (login_session_wm == "failsafe")) {
kwin->closeStdin();
kwin->detach();
dcop->detach();
}
else {
kwin->kill();
dcop->kill();
}
}
delete kwin;
delete dcop;

Loading…
Cancel
Save