summaryrefslogtreecommitdiff
path: root/cleopatre/application/managerd/src/managerd.c
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre/application/managerd/src/managerd.c')
-rw-r--r--cleopatre/application/managerd/src/managerd.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/cleopatre/application/managerd/src/managerd.c b/cleopatre/application/managerd/src/managerd.c
index 5c21b8f938..ed912618b6 100644
--- a/cleopatre/application/managerd/src/managerd.c
+++ b/cleopatre/application/managerd/src/managerd.c
@@ -37,19 +37,26 @@
* and has now to be processed. */
volatile sig_atomic_t is_process_signal_needed;
+/* Global variable indicating if a SIGTERM signal occurred, should exit. */
+volatile sig_atomic_t exit_requested;
+
/**
- * Handle SIGHUP reception.
+ * Handle signal reception.
*
* \param signal_nb signal identifier
*/
void
managerd_signal_handler (int signal_nb)
{
- /* check that we received a SIGHUP signal (other signals must be ignored) */
+ /* Check received signal. */
if (SIGHUP == signal_nb)
{
is_process_signal_needed = 1;
}
+ else if (SIGTERM == signal_nb)
+ {
+ exit_requested = 1;
+ }
}
/**
@@ -145,7 +152,7 @@ managerd_process (struct managerd_ctx *ctx)
return -1;
}
- while (1)
+ while(!exit_requested)
{
fd_set readfds, exceptfds;
struct timeval timeout;
@@ -357,6 +364,9 @@ managerd_init (struct managerd_ctx *ctx)
return -1;
}
+ /* Catch SIGTERM. */
+ signal (SIGTERM, managerd_signal_handler);
+
return 0;
}
@@ -385,6 +395,9 @@ managerd_uninit (struct managerd_ctx *ctx)
//Uninitialize simple connect part (close "/dev/gpio")
simple_connect_uninit (ctx);
+
+ /* Unregister to file update. */
+ libspid_system_file_update_unregister (getpid (), LIBSPID_HPAV_INFO_PATH);
}
/**