Dolda2000 GitWeb
/
statserve.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Ensure libdb handles are properly closed when terminating.
[statserve.git]
/
statserve.c
diff --git
a/statserve.c
b/statserve.c
index
ab3b346
..
9bee73b
100644
(file)
--- a/
statserve.c
+++ b/
statserve.c
@@
-3,6
+3,7
@@
#include <unistd.h>
#include <errno.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>
+#include <sys/socket.h>
#include <ashd/req.h>
#include <ashd/resp.h>
#include <ashd/log.h>
#include <ashd/req.h>
#include <ashd/resp.h>
#include <ashd/log.h>
@@
-84,6
+85,21
@@
static void listenloop(struct muth *muth, va_list args)
}
}
}
}
+static void sigterm(int sig)
+{
+ shutdown(0, SHUT_RDWR);
+}
+
+static void closeall(void)
+{
+ struct source *src;
+
+ for(src = sources; src != NULL; src = src->next) {
+ if(src->close)
+ src->close(src);
+ }
+}
+
int main(int argc, char **argv)
{
int c;
int main(int argc, char **argv)
{
int c;
@@
-104,7
+120,10
@@
int main(int argc, char **argv)
}
last = NULL;
while(optind < argc) {
}
last = NULL;
while(optind < argc) {
- src = parsesource(argv[optind++]);
+ if((src = parsesource(argv[optind++])) == NULL) {
+ closeall();
+ return(1);
+ }
if(!sources)
sources = src;
if(last)
if(!sources)
sources = src;
if(last)
@@
-113,9
+132,13
@@
int main(int argc, char **argv)
}
if(!sources) {
usage(stderr);
}
if(!sources) {
usage(stderr);
+ closeall();
return(1);
}
mustart(listenloop, 0);
return(1);
}
mustart(listenloop, 0);
+ signal(SIGINT, sigterm);
+ signal(SIGTERM, sigterm);
ioloop();
ioloop();
+ closeall();
return(0);
}
return(0);
}