Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
SUSE:SLE-15-SP5:GA
lvm2.15869
bug-1172597_5-lvmetad-fix-timeout-on-shutdown.p...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File bug-1172597_5-lvmetad-fix-timeout-on-shutdown.patch of Package lvm2.15869
From 61358d92cbf202dbb483d63a63d5adf0463bb934 Mon Sep 17 00:00:00 2001 From: Zdenek Kabelac <zkabelac@redhat.com> Date: Wed, 25 Sep 2019 17:22:49 +0200 Subject: [PATCH] lvmetad: fix timeout on shutdown When lvmetad is going to be shutdown - there were 2 issue: If there was endless stream of command contacting lvmetad - the process would never finish - so now when we recieved SIGTERM - we are no longer accepting new connections and we just wait till the existing ones are finished. 2nd. issue is that actually when we are waiting for finish of all client threads - we basically want an usleep() and check if all threads are already finished - proper solution would be to singal from a thread there is some work to do for master thread - but that would be a bigger change and since lvmetad is no longer developed - keep the change minimal and just use pselect() as our '1sec.' sleeping call once we are in 'shutdown' mode. Reported-by: wangjufeng@huawei.com --- libdaemon/server/daemon-server.c | 11 +++++++++-- 1 files changed, 9 insertions(+), 2 deletions(-) diff --git a/libdaemon/server/daemon-server.c b/libdaemon/server/daemon-server.c index bc58f7b..62f403a 100644 --- a/libdaemon/server/daemon-server.c +++ b/libdaemon/server/daemon-server.c @@ -89,6 +89,13 @@ static int _is_idle(daemon_state s) static struct timespec *_get_timeout(daemon_state s) { + static struct timespec _tm = { 0 }; + + if (_shutdown_requested) { + _tm.tv_sec = 1; + return &_tm; + } + return s.idle ? s.idle->ptimeout : NULL; } @@ -506,7 +513,7 @@ static int _handle_connect(daemon_state s) socklen_t sl = sizeof(sockaddr); client.socket_fd = accept(s.socket_fd, (struct sockaddr *) &sockaddr, &sl); - if (client.socket_fd < 0) { + if (client.socket_fd < 0 || _shutdown_requested) { if (errno != EAGAIN || !_shutdown_requested) ERROR(&s, "Failed to accept connection: %s.", strerror(errno)); return 0; @@ -672,7 +679,7 @@ void daemon_start(daemon_state s) continue; } - if (FD_ISSET(s.socket_fd, &in)) { + if (!_shutdown_requested && FD_ISSET(s.socket_fd, &in)) { timeout_count = 0; _handle_connect(s); } -- 1.8.3.1
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor