summaryrefslogtreecommitdiff
path: root/src/ipcpd/ipcp.c
diff options
context:
space:
mode:
authorSander Vrijders <sander.vrijders@intec.ugent.be>2016-05-26 14:42:45 +0200
committerSander Vrijders <sander.vrijders@intec.ugent.be>2016-05-26 15:08:13 +0200
commitc1dd73319e5bc80a158cb1c4cffae3c9a7b13a87 (patch)
treebe92fa1c79329b17f131a055f3b93a92114ba1f0 /src/ipcpd/ipcp.c
parent98f5a4cd845035a7fbeaa8ea95e58023c52e2b9c (diff)
downloadouroboros-c1dd73319e5bc80a158cb1c4cffae3c9a7b13a87.tar.gz
ouroboros-c1dd73319e5bc80a158cb1c4cffae3c9a7b13a87.zip
ipcpd: Cleanup handler for main message loop
This adds a cleanup handler for the main message loop, which closes the socket upon pthread_cancel so that the ipcp can exit cleanly.
Diffstat (limited to 'src/ipcpd/ipcp.c')
-rw-r--r--src/ipcpd/ipcp.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/src/ipcpd/ipcp.c b/src/ipcpd/ipcp.c
index dd370005..e0dd1b60 100644
--- a/src/ipcpd/ipcp.c
+++ b/src/ipcpd/ipcp.c
@@ -93,6 +93,9 @@ void * ipcp_main_loop(void * o)
return (void *) 1;
}
+ pthread_cleanup_push((void(*)(void *)) close,
+ (void *) &sockfd);
+
free(sock_path);
while (true) {
@@ -259,5 +262,7 @@ void * ipcp_main_loop(void * o)
close(lsockfd);
}
+ pthread_cleanup_pop(0);
+
return NULL;
}