|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH v5 21/21] tools: Clean up vchan-socket-proxy socket
To avoid socket files lingering in /run/xen, have vchan-socket-proxy
clean up the sockets it creates. Use a signal handler as well as atexit
to handle both means of termination.
Signed-off-by: Jason Andryuk <jandryuk@xxxxxxxxx>
---
tools/libvchan/vchan-socket-proxy.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/tools/libvchan/vchan-socket-proxy.c
b/tools/libvchan/vchan-socket-proxy.c
index 13700c5d67..0fb42964b5 100644
--- a/tools/libvchan/vchan-socket-proxy.c
+++ b/tools/libvchan/vchan-socket-proxy.c
@@ -33,6 +33,7 @@
#include <stdlib.h>
#include <stdio.h>
+#include <signal.h>
#include <string.h>
#include <unistd.h>
#include <fcntl.h>
@@ -88,6 +89,22 @@ char outbuf[BUFSIZE];
int insiz = 0;
int outsiz = 0;
int verbose = 0;
+char *cleanup_socket;
+
+static void cleanup(void)
+{
+ if (cleanup_socket) {
+ unlink(cleanup_socket);
+ free(cleanup_socket);
+ cleanup_socket = NULL;
+ }
+}
+
+static void cleanup_exit(int signum)
+{
+ cleanup();
+ exit(0);
+}
static void vchan_wr(struct libxenvchan *ctrl) {
int ret;
@@ -394,6 +411,9 @@ int main(int argc, char **argv)
vchan_path = argv[optind+1];
socket_path = argv[optind+2];
+ signal(SIGHUP, cleanup_exit);
+ signal(SIGTERM, cleanup_exit);
+
if (is_server) {
ctrl = libxenvchan_server_init(NULL, domid, vchan_path, 0, 0);
if (!ctrl) {
@@ -410,6 +430,8 @@ int main(int argc, char **argv)
perror("listen socket");
return 1;
}
+ cleanup_socket = strdup(socket_path);
+ atexit(cleanup);
}
}
--
2.20.1
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |