Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp> --- sheep/sheep.c | 44 +++++++++++++++++++++++++++++--------------- sheep/sheep_priv.h | 1 + 2 files changed, 30 insertions(+), 15 deletions(-) diff --git a/sheep/sheep.c b/sheep/sheep.c index 695aa95..8b35777 100644 --- a/sheep/sheep.c +++ b/sheep/sheep.c @@ -75,6 +75,7 @@ int main(int argc, char **argv) char path[PATH_MAX]; int64_t zone = -1; char *p; + int status = 0; signal(SIGPIPE, SIG_IGN); @@ -129,34 +130,47 @@ int main(int argc, char **argv) srandom(port); ret = init_store(dir); - if (ret) - exit(1); + if (ret) { + status = 1; + goto out; + } ret = log_init(program_name, LOG_SPACE_SIZE, is_daemon, log_level, path); - if (ret) - exit(1); + if (ret) { + status = 1; + goto out; + } - if (is_daemon && daemon(0, 0)) - exit(1); + if (is_daemon && daemon(0, 0)) { + status = 1; + goto out; + } jrnl_recover(); ret = init_event(EPOLL_SIZE); - if (ret) - exit(1); + if (ret) { + status = 1; + goto out; + } ret = init_work_queue(NR_WORKER_THREAD); - if (ret) - exit(1); + if (ret) { + status = 1; + goto out; + } ret = create_listen_port(port, sys); - if (ret) - exit(1); + if (ret) { + status = 1; + goto out; + } ret = create_cluster(port, zone); if (ret) { eprintf("failed to create sheepdog cluster.\n"); - exit(1); + status = 1; + goto out; } vprintf(SDOG_NOTICE "Sheepdog daemon (version %s) started\n", PACKAGE_VERSION); @@ -165,8 +179,8 @@ int main(int argc, char **argv) event_loop(-1); vprintf(SDOG_INFO "shutdown\n"); - +out: log_close(); - return 0; + return status; } diff --git a/sheep/sheep_priv.h b/sheep/sheep_priv.h index f8f8c65..b80c747 100644 --- a/sheep/sheep_priv.h +++ b/sheep/sheep_priv.h @@ -292,6 +292,7 @@ static inline int is_myself(uint8_t *addr, uint16_t port) #define panic(fmt, args...) \ ({ \ vprintf(SDOG_EMERG fmt, ##args); \ + log_close(); \ exit(1); \ }) -- 1.7.2.5 |