The following pull request was submitted through Github. It can be accessed and reviewed at: https://github.com/lxc/lxcfs/pull/371
This e-mail was sent by the LXC bot, direct replies will not reach the author unless they happen to be subscribed to this list. === Description (from pull-request) === Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com>
From 950353e057f7f8b20d278540bcf953e7959aa9e9 Mon Sep 17 00:00:00 2001 From: Christian Brauner <christian.brau...@ubuntu.com> Date: Sun, 15 Mar 2020 00:39:17 +0100 Subject: [PATCH] bindings: introduce set_signal_handler Signed-off-by: Christian Brauner <christian.brau...@ubuntu.com> --- src/bindings.c | 34 ++++++++++------------------------ src/bindings.h | 12 ++++++++++++ src/lxcfs.c | 6 +++--- 3 files changed, 25 insertions(+), 27 deletions(-) diff --git a/src/bindings.c b/src/bindings.c index e642e64..78f27e7 100644 --- a/src/bindings.c +++ b/src/bindings.c @@ -16,6 +16,8 @@ #include <fuse.h> #include <inttypes.h> #include <libgen.h> +#include <linux/magic.h> +#include <linux/sched.h> #include <pthread.h> #include <sched.h> #include <stdarg.h> @@ -24,27 +26,24 @@ #include <stdio.h> #include <stdlib.h> #include <string.h> -#include <time.h> -#include <unistd.h> -#include <wait.h> -#include <linux/magic.h> -#include <linux/sched.h> #include <sys/epoll.h> #include <sys/mman.h> #include <sys/mount.h> #include <sys/param.h> -#include <signal.h> #include <sys/socket.h> #include <sys/syscall.h> #include <sys/sysinfo.h> #include <sys/vfs.h> +#include <time.h> +#include <unistd.h> +#include <wait.h> #include "api_extensions.h" #include "bindings.h" -#include "config.h" #include "cgroup_fuse.h" #include "cgroups/cgroup.h" #include "cgroups/cgroup_utils.h" +#include "config.h" #include "memory_utils.h" #include "proc_cpuview.h" #include "utils.h" @@ -722,7 +721,7 @@ static bool cgfs_setup_controllers(void) return true; } -static void sigusr2_handler(int signo, siginfo_t *info, void *extra) +static void sigusr2_toggle_virtualization(int signo, siginfo_t *info, void *extra) { int ret; @@ -755,21 +754,6 @@ static void sigusr2_handler(int signo, siginfo_t *info, void *extra) return; } -static int set_sigusr2_handler(void) -{ - int ret; - struct sigaction action = { - .sa_flags = SA_SIGINFO, - .sa_sigaction = sigusr2_handler, - }; - - ret = sigaction(SIGUSR2, &action, NULL); - if (ret) - return log_error_errno(-1, errno, "Failed to set SIGUSR2 signal handler"); - - return 0; -} - static void __attribute__((constructor)) lxcfs_init(void) { __do_close_prot_errno int init_ns = -EBADF, root_fd = -EBADF, @@ -837,8 +821,10 @@ static void __attribute__((constructor)) lxcfs_init(void) else if (fchdir(root_fd) < 0) lxcfs_info("%s - Failed to change to root directory", strerror(errno)); - if (set_sigusr2_handler()) + if (set_signal_handler(SIGUSR2, sigusr2_toggle_virtualization)) { + lxcfs_info("%s - Failed to install SIGUSR2 signal handler"); goto broken_upgrade; + } reload_successful = 1; return; diff --git a/src/bindings.h b/src/bindings.h index 43dc258..33b850f 100644 --- a/src/bindings.h +++ b/src/bindings.h @@ -14,6 +14,7 @@ #define _FILE_OFFSET_BITS 64 #include <fuse.h> +#include <signal.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> @@ -91,4 +92,15 @@ extern void prune_init_slice(char *cg); extern bool supports_pidfd(void); extern bool liblxcfs_functional(void); +static inline int set_signal_handler(int signo, + void (*handler)(int, siginfo_t *, void *)) +{ + struct sigaction action = { + .sa_flags = SA_SIGINFO, + .sa_sigaction = handler, + }; + + return sigaction(signo, &action, NULL); +} + #endif /* __LXCFS_BINDINGS_H */ diff --git a/src/lxcfs.c b/src/lxcfs.c index db99964..2af67b4 100644 --- a/src/lxcfs.c +++ b/src/lxcfs.c @@ -173,7 +173,7 @@ static void down_users(void) users_unlock(); } -static void reload_handler(int sig) +static void sigusr1_reload(int signo, siginfo_t *info, void *extra) { need_reload = 1; } @@ -1148,8 +1148,8 @@ int main(int argc, char *argv[]) usage(); do_reload(); - if (signal(SIGUSR1, reload_handler) == SIG_ERR) { - lxcfs_error("Error setting USR1 signal handler: %m"); + if (set_signal_handler(SIGUSR1, sigusr1_reload)) { + lxcfs_error("%s - Failed to install SIGUSR1 signal handler"); goto out; }
_______________________________________________ lxc-devel mailing list lxc-devel@lists.linuxcontainers.org http://lists.linuxcontainers.org/listinfo/lxc-devel