summaryrefslogtreecommitdiff
path: root/cleopatre
diff options
context:
space:
mode:
Diffstat (limited to 'cleopatre')
-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 abc6e6f68b..6d6b28c9df 100644
--- a/cleopatre/application/managerd/src/managerd.c
+++ b/cleopatre/application/managerd/src/managerd.c
@@ -36,19 +36,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;
+ }
}
/**
@@ -143,7 +150,7 @@ static int managerd_process(struct managerd_ctx *ctx)
return -1;
}
- while(1)
+ while(!exit_requested)
{
fd_set readfds, exceptfds;
struct timeval timeout;
@@ -309,6 +316,9 @@ static int managerd_init(struct managerd_ctx *ctx)
return -1;
}
+ /* Catch SIGTERM. */
+ signal (SIGTERM, managerd_signal_handler);
+
return 0;
}
@@ -333,6 +343,9 @@ static void 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);
}
/**