diff options
author | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-08-04 19:25:13 +0900 |
---|---|---|
committer | Michele Calgaro <michele.calgaro@yahoo.it> | 2025-09-04 09:20:13 +0900 |
commit | 8252927210f087b78b5608ee0a2ecd7f05821a5e (patch) | |
tree | 56def1bc63800586e5850b061043ad6c091dda7d /kdesktop/lock/main.cpp | |
parent | 5e6907dc188dd0f3927a47d5844daa632428ad82 (diff) | |
download | tdebase-8252927210f087b78b5608ee0a2ecd7f05821a5e.tar.gz tdebase-8252927210f087b78b5608ee0a2ecd7f05821a5e.zip |
kdesktop: simplify lock process code. This ensure correct cleanup in case of unexpected termination of the process.
Signed-off-by: Michele Calgaro <michele.calgaro@yahoo.it>
Diffstat (limited to 'kdesktop/lock/main.cpp')
-rw-r--r-- | kdesktop/lock/main.cpp | 38 |
1 files changed, 8 insertions, 30 deletions
diff --git a/kdesktop/lock/main.cpp b/kdesktop/lock/main.cpp index 090d4ae6e..9f707c35d 100644 --- a/kdesktop/lock/main.cpp +++ b/kdesktop/lock/main.cpp @@ -67,8 +67,6 @@ bool trinity_desktop_lock_forced = false; // This is a temporary variable used till a fix for the grab issue is prepared bool trinity_desktop_lock_failed_grab = false; -LockProcess* trinity_desktop_lock_process = nullptr; - bool signalled_forcelock; bool signalled_dontlock; bool signalled_securedialog; @@ -222,19 +220,6 @@ void restore_hidden_override_redirect_windows() { } } -static void shutdown_lock_process(bool unclean) -{ - if (unclean) - { - // Send a USR1 signal to kdesktop to make sure it does not get stuck into - // an `Engaging` state in case kdesktop_lock activation failed. This prevents - // the locking mechanism from becaming unresponsive in case of exceptions. - kill(kdesktop_pid, SIGUSR1); - } - delete trinity_desktop_lock_process; - trinity_desktop_lock_process = nullptr; -} - // ----------------------------------------------------------------------------- int main( int argc, char **argv ) @@ -396,7 +381,7 @@ int main( int argc, char **argv ) tdmconfig->setGroup("X-:*-Greeter"); // Create new LockProcess, which also spawns threads inheriting the blocked signal mask - trinity_desktop_lock_process = new LockProcess; + LockProcess lock_process; // Unblock reception of all signals in this thread sigprocmask(SIG_UNBLOCK, &new_mask, NULL); @@ -510,34 +495,33 @@ int main( int argc, char **argv ) trinity_desktop_lock_forced = true; } - trinity_desktop_lock_process->init(child, (args->isSet( "blank" ) || signalled_blank)); + lock_process.init(child, (args->isSet( "blank" ) || signalled_blank)); if (!child) { - trinity_desktop_lock_process->setChildren(child_sockets); + lock_process.setChildren(child_sockets); } else { - trinity_desktop_lock_process->setParent(parent_connection); + lock_process.setParent(parent_connection); } trinity_desktop_lock_failed_grab = false; bool rt; if( (!child && args->isSet( "forcelock" )) || signalled_forcelock) { - rt = trinity_desktop_lock_process->lock(); + rt = lock_process.lock(); } else if( child || (args->isSet( "dontlock" ) || signalled_dontlock)) { - rt = trinity_desktop_lock_process->dontLock(); + rt = lock_process.dontLock(); } else if( child || (args->isSet( "securedialog" ) || signalled_securedialog)) { int retcode = tde_sak_verify_calling_process(); if (retcode == 0) { - rt = trinity_desktop_lock_process->runSecureDialog(); + rt = lock_process.runSecureDialog(); } else { - shutdown_lock_process(true); return 1; } } else { - rt = trinity_desktop_lock_process->defaultSave(); + rt = lock_process.defaultSave(); } // Make sure to handle all pending responses from the X server. @@ -551,7 +535,6 @@ int main( int argc, char **argv ) app->processEvents(); if (!rt) { - shutdown_lock_process(true); return (trinity_desktop_lock_failed_grab ? 0 : 12); } @@ -559,13 +542,11 @@ int main( int argc, char **argv ) trinity_desktop_lock_hidden_window_list.clear(); int ret = app->exec(); restore_hidden_override_redirect_windows(); - shutdown_lock_process(false); return ret; } else { if (kill(kdesktop_pid, 0) < 0) { // The controlling kdesktop process probably died. Commit suicide... - shutdown_lock_process(true); return 12; } trinity_desktop_lock_hidden_window_list.clear(); @@ -573,12 +554,9 @@ int main( int argc, char **argv ) restore_hidden_override_redirect_windows(); if (kill(kdesktop_pid, SIGUSR1) < 0) { // The controlling kdesktop process probably died. Commit suicide... - shutdown_lock_process(true); return 12; } - shutdown_lock_process(false); - // FIXME // We should not have to return (restart) at all, // but it seems that some X11 connections are left active, |