From 706a579e96538c5ea8205870ef9026fa0c458e33 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Tue, 6 Sep 2016 09:25:27 +0200 Subject: [PATCH] charon-nm: Terminate if signaled by NetworkManager This only happens during shutdown, not after terminating a connection. Fixes #3579. --- src/charon-nm/nm/nm_backend.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/src/charon-nm/nm/nm_backend.c b/src/charon-nm/nm/nm_backend.c index 379a2f30b..1d6688390 100644 --- a/src/charon-nm/nm/nm_backend.c +++ b/src/charon-nm/nm/nm_backend.c @@ -14,6 +14,9 @@ * for more details. */ +#include +#include + #include "nm_service.h" #include "nm_creds.h" #include "nm_handler.h" @@ -54,12 +57,21 @@ struct nm_backend_t { */ static nm_backend_t *nm_backend = NULL; +/** + * Terminate the daemon if signaled by NM + */ +static void terminate(void *plugin, void *arg) +{ + kill(getpid(), SIGTERM); +} + /** * NM plugin processing routine, creates and handles NMVpnServicePlugin */ static job_requeue_t run(nm_backend_t *this) { this->loop = g_main_loop_new(NULL, FALSE); + g_signal_connect(this->plugin, "quit", G_CALLBACK(terminate), NULL); g_main_loop_run(this->loop); return JOB_REQUEUE_NONE; }