Fix long-standing inverted signal mask in kdesktop_lock initial sigsuspend

Prevent helper thread termination signal from errantly being handled by main thread
(cherry picked from commit 37bc5cdd0e)
pull/182/head
Timothy Pearson 9 years ago committed by Slávek Banko
parent 5d4afcb68f
commit 7188f7044b

@ -2842,6 +2842,13 @@ void ControlPipeHandlerObject::run(void) {
mThreadID = pthread_self();
mRunning = true;
sigset_t new_mask;
sigemptyset(&new_mask);
sigaddset(&new_mask, SIGUSR1);
// Unblock SIGUSR1
pthread_sigmask(SIG_UNBLOCK, &new_mask, NULL);
int display_number = atoi(TQString(XDisplayString(tqt_xdisplay())).replace(":","").ascii());
if (display_number < 0) {

@ -378,7 +378,6 @@ int main( int argc, char **argv )
if (args->isSet( "internal" )) {
kdesktop_pid = atoi(args->getOption( "internal" ));
while (signalled_run == FALSE) {
sigset_t new_mask;
sigset_t orig_mask;
struct sigaction act;
@ -417,13 +416,14 @@ int main( int argc, char **argv )
sigaction(SIGTTOU, &act, 0L);
// initialize the signal masks
sigfillset(&new_mask);
sigdelset(&new_mask,SIGUSR1);
sigdelset(&new_mask,SIGUSR2);
sigdelset(&new_mask,SIGWINCH);
sigdelset(&new_mask,SIGTTIN);
sigdelset(&new_mask,SIGTTOU);
sigemptyset(&new_mask);
sigaddset(&new_mask,SIGUSR1);
sigaddset(&new_mask,SIGUSR2);
sigaddset(&new_mask,SIGWINCH);
sigaddset(&new_mask,SIGTTIN);
sigaddset(&new_mask,SIGTTOU);
while (signalled_run == FALSE) {
// let kdesktop know the saver process is ready
if (kill(kdesktop_pid, SIGTTIN) < 0) {
// The controlling kdesktop process probably died. Commit suicide...
@ -448,6 +448,9 @@ int main( int argc, char **argv )
// Reenable reception of X11 events on the root window
XSelectInput( tqt_xdisplay(), tqt_xrootwin(), rootAttr.your_event_mask );
}
// Block reception of all signals in this thread
sigprocmask(SIG_BLOCK, &new_mask, NULL);
}
// (re)load settings here so that they actually reflect reality

Loading…
Cancel
Save