From d12ecb53cf8c5955135b94e4b671ad28dfb3a7b4 Mon Sep 17 00:00:00 2001 From: "mbuesch@freenet.de" Date: Tue, 30 Dec 2003 01:21:06 -0800 Subject: [PATCH] [PATCH] introduce signal handler Here's a patch that adds a signal handler to udev to clean up the environment (close the sysbus and close the database) on kill-signals. --- udev.c | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/udev.c b/udev.c index 71c5f1fba53..1d66410b6c0 100644 --- a/udev.c +++ b/udev.c @@ -28,6 +28,7 @@ #include #include #include +#include #include "udev.h" #include "udev_version.h" @@ -40,6 +41,22 @@ char **main_argv; char **main_envp; +static void sig_handler(int signum) +{ + dbg("caught signal %d", signum); + switch (signum) { + case SIGINT: + case SIGTERM: + case SIGKILL: + sysbus_disconnect(); + udevdb_exit(); + exit(20 + signum); + break; + default: + dbg("unhandled signal"); + } +} + static inline char *get_action(void) { char *action; @@ -70,7 +87,11 @@ int main(int argc, char **argv, char **envp) char *devpath; char *subsystem; int retval = -EINVAL; - + + signal(SIGINT, sig_handler); + signal(SIGTERM, sig_handler); + signal(SIGKILL, sig_handler); + main_argv = argv; main_envp = envp;