#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>
#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"
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;
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,
else if (fchdir(root_fd) < 0)
lxcfs_info("%s - Failed to change to root directory", strerror(errno));
- if (set_sigusr2_handler())
+ if (install_signal_handler(SIGUSR2, sigusr2_toggle_virtualization)) {
+ lxcfs_info("%s - Failed to install SIGUSR2 signal handler", strerror(errno));
goto broken_upgrade;
+ }
reload_successful = 1;
return;
#define _FILE_OFFSET_BITS 64
#include <fuse.h>
+#include <signal.h>
#include <stdbool.h>
#include <stdio.h>
#include <stdlib.h>
extern bool supports_pidfd(void);
extern bool liblxcfs_functional(void);
+static inline int install_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 */
users_unlock();
}
-static void reload_handler(int sig)
+static void sigusr1_reload(int signo, siginfo_t *info, void *extra)
{
need_reload = 1;
}
usage();
do_reload();
- if (signal(SIGUSR1, reload_handler) == SIG_ERR) {
- lxcfs_error("Error setting USR1 signal handler: %m");
+ if (install_signal_handler(SIGUSR1, sigusr1_reload)) {
+ lxcfs_error("%s - Failed to install SIGUSR1 signal handler", strerror(errno));
goto out;
}