diff options
Diffstat (limited to 'meta-oe/recipes-graphics/nonworking/slim/slim/0008-restart-Xserver-if-killed.patch')
-rw-r--r-- | meta-oe/recipes-graphics/nonworking/slim/slim/0008-restart-Xserver-if-killed.patch | 161 |
1 files changed, 161 insertions, 0 deletions
diff --git a/meta-oe/recipes-graphics/nonworking/slim/slim/0008-restart-Xserver-if-killed.patch b/meta-oe/recipes-graphics/nonworking/slim/slim/0008-restart-Xserver-if-killed.patch new file mode 100644 index 0000000000..0c5cfb742f --- /dev/null +++ b/meta-oe/recipes-graphics/nonworking/slim/slim/0008-restart-Xserver-if-killed.patch @@ -0,0 +1,161 @@ +From ee77a3d154443d2823ecbf2141daa1b5924f629f Mon Sep 17 00:00:00 2001 +From: iwamatsu <iwamatsu@7c53e7cc-98ea-0310-8f1f-a0b24da60408> +Date: Fri, 17 Jun 2011 20:38:34 +0000 +Subject: [PATCH 8/8] restart Xserver if killed + +Patch from http://developer.berlios.de/patch/?func=detailpatch&patch_id=2378&group_id=2663. + +Signed-off-by: Nobuhiro Iwamatsu <iwamatsu@nigauri.org> + +git-svn-id: svn://svn.berlios.de/slim/trunk@182 7c53e7cc-98ea-0310-8f1f-a0b24da60408 +--- + app.cpp | 36 +++++++++--------------------------- + app.h | 2 +- + 2 files changed, 10 insertions(+), 28 deletions(-) + +diff --git a/app.cpp b/app.cpp +index 44ab099..358a98f 100644 +--- a/app.cpp ++++ b/app.cpp +@@ -104,6 +104,11 @@ int conv(int num_msg, const struct pam_message **msg, + + extern App* LoginApp; + ++int xioerror(Display *disp) { ++ LoginApp->RestartServer(); ++ return 0; ++} ++ + void CatchSignal(int sig) { + cerr << APPNAME << ": unexpected signal " << sig << endl; + +@@ -114,19 +119,6 @@ void CatchSignal(int sig) { + exit(ERR_EXIT); + } + +- +-void AlarmSignal(int sig) { +- int pid = LoginApp->GetServerPID(); +- if(waitpid(pid, NULL, WNOHANG) == pid) { +- LoginApp->StopServer(); +- LoginApp->RemoveLock(); +- exit(OK_EXIT); +- } +- signal(sig, AlarmSignal); +- alarm(2); +-} +- +- + void User1Signal(int sig) { + signal(sig, User1Signal); + } +@@ -275,7 +267,6 @@ void App::Run() { + signal(SIGHUP, CatchSignal); + signal(SIGPIPE, CatchSignal); + signal(SIGUSR1, User1Signal); +- signal(SIGALRM, AlarmSignal); + + #ifndef XNEST_DEBUG + if (!force_nodaemon && cfg->getOption("daemon") == "yes") { +@@ -297,7 +288,6 @@ void App::Run() { + + CreateServerAuth(); + StartServer(); +- alarm(2); + #endif + + } +@@ -613,6 +603,8 @@ void App::Login() { + int status; + while (wpid != pid) { + wpid = wait(&status); ++ if (wpid == ServerPID) ++ xioerror(Dpy); // Server died, simulate IO error + } + if (WIFEXITED(status) && WEXITSTATUS(status)) { + LoginPanel->Message("Failed to execute login command"); +@@ -658,9 +650,6 @@ void App::Login() { + + + void App::Reboot() { +- // Stop alarm clock +- alarm(0); +- + #ifdef USE_PAM + try{ + pam.end(); +@@ -683,9 +672,6 @@ void App::Reboot() { + + + void App::Halt() { +- // Stop alarm clock +- alarm(0); +- + #ifdef USE_PAM + try{ + pam.end(); +@@ -771,6 +757,7 @@ void App::RestartServer() { + + StopServer(); + RemoveLock(); ++ while (waitpid(-1, NULL, WNOHANG) > 0); // Collects all dead childrens + Run(); + } + +@@ -841,6 +828,7 @@ int App::WaitForServer() { + + for(cycles = 0; cycles < ncycles; cycles++) { + if((Dpy = XOpenDisplay(DisplayName))) { ++ XSetIOErrorHandler(xioerror); + return 1; + } else { + if(!ServerTimeout(1, (char *) "X server to begin accepting connections")) +@@ -925,9 +913,6 @@ int App::StartServer() { + ServerPID = -1; + break; + } +- alarm(15); +- pause(); +- alarm(0); + + // Wait for server to start up + if(WaitForServer() == 0) { +@@ -962,15 +947,12 @@ int IgnoreXIO(Display *d) { + + + void App::StopServer() { +- // Stop alars clock and ignore signals +- alarm(0); + signal(SIGQUIT, SIG_IGN); + signal(SIGINT, SIG_IGN); + signal(SIGHUP, SIG_IGN); + signal(SIGPIPE, SIG_IGN); + signal(SIGTERM, SIG_DFL); + signal(SIGKILL, SIG_DFL); +- signal(SIGALRM, SIG_DFL); + + // Catch X error + XSetIOErrorHandler(IgnoreXIO); +diff --git a/app.h b/app.h +index dd7c281..2db1038 100644 +--- a/app.h ++++ b/app.h +@@ -34,6 +34,7 @@ public: + ~App(); + void Run(); + int GetServerPID(); ++ void RestartServer(); + void StopServer(); + + bool serverStarted; +@@ -49,7 +50,6 @@ private: + void Console(); + void Exit(); + void KillAllClients(Bool top); +- void RestartServer(); + void ReadConfig(); + void OpenLog(); + void CloseLog(); +-- +1.6.6.1 + |