-rw-r--r-- | core/launcher/main.cpp | 44 |
1 files changed, 13 insertions, 31 deletions
diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index b119399..aa0dfdf 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp @@ -217,76 +217,58 @@ int initApplication( int argc, char ** argv ) #endif return rv; } static const char *pidfile_path = "/var/run/opie.pid"; void create_pidfile ( ) { FILE *f; if (( f = ::fopen ( pidfile_path, "w" ))) { ::fprintf ( f, "%d", getpid ( )); ::fclose ( f ); } } void remove_pidfile ( ) { ::unlink ( pidfile_path ); } void handle_sigterm ( int /* sig */ ) { - if ( qApp ) - qApp-> quit ( ); + ::signal( SIGCHLD, SIG_IGN ); + ::signal( SIGSEGV, SIG_IGN ); + ::signal( SIGBUS, SIG_IGN ); + ::signal( SIGILL, SIG_IGN ); + ::signal( SIGTERM, SIG_IGN ); + ::signal ( SIGINT, SIG_IGN ); + if ( qApp ) qApp->quit(); } -#ifndef Q_OS_WIN32 int main( int argc, char ** argv ) { - ::signal ( SIGCHLD, SIG_IGN ); - + ::signal( SIGSEGV, handle_sigterm ); + ::signal( SIGBUS, handle_sigterm ); + ::signal( SIGILL, handle_sigterm ); ::signal ( SIGTERM, handle_sigterm ); ::signal ( SIGINT, handle_sigterm ); - ::setsid ( ); ::setpgid ( 0, 0 ); ::atexit ( remove_pidfile ); create_pidfile ( ); int retVal = initApplication( argc, argv ); // Have we been asked to restart? - if ( ServerApplication::doRestart ) { - for ( int fd = 3; fd < 100; fd++ ) - close( fd ); - - execl( (QPEApplication::qpeDir()+"bin/qpe").latin1(), "qpe", 0 ); - } - - // Kill them. Kill them all. - ::kill ( 0, SIGTERM ); - ::sleep ( 1 ); - ::kill ( 0, SIGKILL ); - - return retVal; -} -#else - -int main( int argc, char ** argv ) + if ( ServerApplication::doRestart ) { - int retVal = initApplication( argc, argv ); - - if ( DesktopApplication::doRestart ) { - odebug << "Trying to restart" << oendl; - execl( (QPEApplication::qpeDir()+"bin\\qpe").latin1(), "qpe", 0 ); + for ( int fd = 3; fd < 100; fd++ ) close( fd ); + execl( (QPEApplication::qpeDir()+"bin/qpe").latin1(), "qpe", 0 ); } return retVal; } - -#endif - |