author | sandman <sandman> | 2002-08-04 02:25:54 (UTC) |
---|---|---|
committer | sandman <sandman> | 2002-08-04 02:25:54 (UTC) |
commit | 8fd0780faa16abbcf7db9220af1bc333ae484ec8 (patch) (side-by-side diff) | |
tree | ffacd596daa0ab07890f185510275667649d55db /core | |
parent | 549df674d7af9fe1347751e6a63d6ed8249d2503 (diff) | |
download | opie-8fd0780faa16abbcf7db9220af1bc333ae484ec8.zip opie-8fd0780faa16abbcf7db9220af1bc333ae484ec8.tar.gz opie-8fd0780faa16abbcf7db9220af1bc333ae484ec8.tar.bz2 |
1) Fixes for suspend/resume (improved it for iPAQ, shouldn't have changed
anything for Z) -- It seems that this also fixes the 70% CPU load
problem (needs more testing/feedback though)
2) the launcher now creates a /var/run/opie.pid file containing its pid
3) the launcher catches SIGTERM and kills all its child processes
-rw-r--r-- | core/launcher/desktop.cpp | 58 | ||||
-rw-r--r-- | core/launcher/main.cpp | 42 |
2 files changed, 70 insertions, 30 deletions
diff --git a/core/launcher/desktop.cpp b/core/launcher/desktop.cpp index f90da1a..7f24259 100644 --- a/core/launcher/desktop.cpp +++ b/core/launcher/desktop.cpp @@ -605,28 +605,38 @@ static void darkScreen() void Desktop::togglePower() { - bool wasloggedin = loggedin; - loggedin=0; - suspendTime = QDateTime::currentDateTime(); - darkScreen(); - if ( wasloggedin ) - blankScreen(); - - system("apm --suspend"); - - - - QWSServer::screenSaverActivate( FALSE ); - { - QCopEnvelope("QPE/Card", "mtabChanged()" ); // might have changed while asleep - QCopEnvelope e("QPE/System", "setBacklight(int)"); - e << -3; // Force on - } - if ( wasloggedin ) { - login(TRUE); - } - sleep(1); - execAutoStart(); - //qcopBridge->closeOpenConnections(); - //qDebug("called togglePower()!!!!!!"); + static bool excllock = false; + + if ( excllock ) + return; + + excllock = true; + + bool wasloggedin = loggedin; + loggedin=0; + suspendTime = QDateTime::currentDateTime(); + darkScreen(); + if ( wasloggedin ) + blankScreen(); + + ODevice::inst ( )-> suspend ( ); + + QWSServer::screenSaverActivate( FALSE ); + + { + QCopEnvelope("QPE/Card", "mtabChanged()" ); // might have changed while asleep + QCopEnvelope e("QPE/System", "setBacklight(int)"); + e << -3; // Force on + } + + if ( wasloggedin ) + login(TRUE); + + execAutoStart(); + //qcopBridge->closeOpenConnections(); + //qDebug("called togglePower()!!!!!!"); + + qApp-> processEvents ( ); + + excllock = false; } diff --git a/core/launcher/main.cpp b/core/launcher/main.cpp index a19da14..1e741d5 100644 --- a/core/launcher/main.cpp +++ b/core/launcher/main.cpp @@ -334,18 +334,48 @@ int initApplication( int argc, char ** argv ) } +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 ( ); +} + int main( int argc, char ** argv ) { #ifndef SINGLE_APP - signal( SIGCHLD, SIG_IGN ); + ::signal( SIGCHLD, SIG_IGN ); + + ::signal ( SIGTERM, handle_sigterm ); + + ::setsid ( ); + ::setpgid ( 0, 0 ); + + ::atexit ( remove_pidfile ); + create_pidfile ( ); #endif - int retVal = initApplication( argc, argv ); + int retVal = initApplication ( argc, argv ); #ifndef SINGLE_APP // Kill them. Kill them all. - setpgid( getpid(), getppid() ); - killpg( getpid(), SIGTERM ); - sleep( 1 ); - killpg( getpid(), SIGKILL ); + ::kill ( 0, SIGTERM ); + ::sleep( 1 ); + ::kill ( 0, SIGKILL ); #endif |