Added terminal signal handler.
git-svn-id: http://svn.zoneminder.com/svn/zm/trunk@26 e3e1d417-86f3-4887-817a-d78f3d33393f
This commit is contained in:
parent
35407be9c4
commit
6ee0d8bdd0
22
src/zma.cpp
22
src/zma.cpp
|
@ -4,9 +4,16 @@ bool reload = false;
|
|||
|
||||
void hup_handler( int signal )
|
||||
{
|
||||
Info(( "Got HUP signal, reloading" ));
|
||||
reload = true;
|
||||
}
|
||||
|
||||
void term_handler( int signal )
|
||||
{
|
||||
Info(( "Got TERM signal, exiting" ));
|
||||
exit( 0 );
|
||||
}
|
||||
|
||||
void main( int argc, const char *argv[] )
|
||||
{
|
||||
int device = argv[1]?atoi( argv[1] ):0;
|
||||
|
@ -44,14 +51,27 @@ void main( int argc, const char *argv[] )
|
|||
action.sa_mask = block_set;
|
||||
action.sa_flags = 0;
|
||||
sigaction( SIGHUP, &action, &old_action );
|
||||
action.sa_handler = term_handler;
|
||||
action.sa_mask = block_set;
|
||||
action.sa_flags = 0;
|
||||
sigaction( SIGTERM, &action, &old_action );
|
||||
sigaddset( &block_set, SIGHUP );
|
||||
sigaddset( &block_set, SIGTERM );
|
||||
while( 1 )
|
||||
{
|
||||
// Process the next image
|
||||
bool result = false;
|
||||
sigprocmask( SIG_BLOCK, &block_set, 0 );
|
||||
for ( int i = 0; i < n_monitors; i++ )
|
||||
{
|
||||
monitors[i]->Analyse();
|
||||
if ( monitors[i]->Analyse() )
|
||||
{
|
||||
result = true;
|
||||
}
|
||||
}
|
||||
if ( !result )
|
||||
{
|
||||
usleep( 10000 );
|
||||
}
|
||||
sigprocmask( SIG_UNBLOCK, &block_set, 0 );
|
||||
if ( reload )
|
||||
|
|
16
src/zmc.cpp
16
src/zmc.cpp
|
@ -4,9 +4,16 @@ bool reload = false;
|
|||
|
||||
void hup_handler( int signal )
|
||||
{
|
||||
Info(( "Got HUP signal, reloading" ));
|
||||
reload = true;
|
||||
}
|
||||
|
||||
void term_handler( int signal )
|
||||
{
|
||||
Info(( "Got TERM signal, exiting" ));
|
||||
exit( 0 );
|
||||
}
|
||||
|
||||
void main( int argc, const char *argv[] )
|
||||
{
|
||||
int device = argv[1]?atoi( argv[1] ):0;
|
||||
|
@ -44,7 +51,12 @@ void main( int argc, const char *argv[] )
|
|||
action.sa_mask = block_set;
|
||||
action.sa_flags = 0;
|
||||
sigaction( SIGHUP, &action, &old_action );
|
||||
action.sa_handler = term_handler;
|
||||
action.sa_mask = block_set;
|
||||
action.sa_flags = 0;
|
||||
sigaction( SIGTERM, &action, &old_action );
|
||||
sigaddset( &block_set, SIGHUP );
|
||||
sigaddset( &block_set, SIGTERM );
|
||||
if ( n_monitors == 1 )
|
||||
{
|
||||
monitors[0]->PreCapture();
|
||||
|
@ -63,8 +75,10 @@ void main( int argc, const char *argv[] )
|
|||
{
|
||||
for ( int i = 0; i < n_monitors; i++ )
|
||||
{
|
||||
monitors[i]->CheckFunction();
|
||||
delete monitors[i];
|
||||
}
|
||||
monitors = 0;
|
||||
n_monitors = Monitor::Load( device, monitors );
|
||||
reload = false;
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue