updated on Wed Jan 25 08:34:36 UTC 2012
[aur-mirror.git] / slim-cursor / slim.patch2
blob2ea774b81eac9670e01cb0f82959a7a9e0daf997
1 Index: trunk/app.h
2 ===================================================================
3 --- trunk/app.h (revision 151)
4 +++ trunk/app.h (working copy)
5 @@ -34,6 +34,7 @@
6      ~App();
7      void Run();
8      int GetServerPID();
9 +    void RestartServer();
10      void StopServer();
12      // Lock functions
13 @@ -48,7 +49,6 @@
14      void Console();
15      void Exit();
16      void KillAllClients(Bool top);
17 -    void RestartServer();
18      void ReadConfig();
19      void OpenLog();
20      void CloseLog();
21 Index: trunk/app.cpp
22 ===================================================================
23 --- trunk/app.cpp       (revision 151)
24 +++ trunk/app.cpp       (working copy)
25 @@ -100,6 +100,11 @@
27  extern App* LoginApp;
29 +int xioerror(Display *disp) {
30 +       LoginApp->RestartServer();
31 +    return 0;
34  void CatchSignal(int sig) {
35      cerr << APPNAME << ": unexpected signal " << sig << endl;
36      LoginApp->StopServer();
37 @@ -107,19 +112,6 @@
38      exit(ERR_EXIT);
39  }
42 -void AlarmSignal(int sig) {
43 -    int pid = LoginApp->GetServerPID();
44 -    if(waitpid(pid, NULL, WNOHANG) == pid) {
45 -        LoginApp->StopServer();
46 -        LoginApp->RemoveLock();
47 -        exit(OK_EXIT);
48 -    }
49 -    signal(sig, AlarmSignal);
50 -    alarm(2);
54  void User1Signal(int sig) {
55      signal(sig, User1Signal);
56  }
57 @@ -257,7 +249,6 @@
58          signal(SIGHUP, CatchSignal);
59          signal(SIGPIPE, CatchSignal);
60          signal(SIGUSR1, User1Signal);
61 -        signal(SIGALRM, AlarmSignal);
63  #ifndef XNEST_DEBUG
64          OpenLog();
65 @@ -277,7 +268,6 @@
67          CreateServerAuth();
68          StartServer();
69 -        alarm(2);
70  #endif
72      }
73 @@ -575,6 +565,8 @@
74      int status;
75      while (wpid != pid) {
76          wpid = wait(&status);
77 +               if (wpid == ServerPID)
78 +                       xioerror(Dpy);  // Server died, simulate IO error
79      }
80      if (WIFEXITED(status) && WEXITSTATUS(status)) {
81          LoginPanel->Message("Failed to execute login command");
82 @@ -620,9 +612,6 @@
85  void App::Reboot() {
86 -    // Stop alarm clock
87 -    alarm(0);
89  #ifdef USE_PAM
90      try{
91          pam.end();
92 @@ -645,9 +634,6 @@
95  void App::Halt() {
96 -    // Stop alarm clock
97 -    alarm(0);
99  #ifdef USE_PAM
100      try{
101          pam.end();
102 @@ -733,6 +719,7 @@
104      StopServer(); 
105      RemoveLock();
106 +       while (waitpid(-1, NULL, WNOHANG) > 0); // Collects all dead childrens
107      Run();
108  } 
110 @@ -803,6 +790,7 @@
112      for(cycles = 0; cycles < ncycles; cycles++) {
113          if((Dpy = XOpenDisplay(DisplayName))) {
114 +            XSetIOErrorHandler(xioerror);
115              return 1;
116          } else {
117              if(!ServerTimeout(1, "X server to begin accepting connections"))
118 @@ -885,9 +873,6 @@
119              ServerPID = -1;
120              break;
121          }
122 -        alarm(15);
123 -        pause();
124 -        alarm(0);
126          // Wait for server to start up
127          if(WaitForServer() == 0) {
128 @@ -920,15 +905,12 @@
131  void App::StopServer() {
132 -    // Stop alars clock and ignore signals
133 -    alarm(0);
134      signal(SIGQUIT, SIG_IGN);
135      signal(SIGINT, SIG_IGN);
136      signal(SIGHUP, SIG_IGN);
137      signal(SIGPIPE, SIG_IGN);
138      signal(SIGTERM, SIG_DFL);
139      signal(SIGKILL, SIG_DFL);
140 -    signal(SIGALRM, SIG_DFL);
142      // Catch X error
143      XSetIOErrorHandler(IgnoreXIO);