summaryrefslogtreecommitdiff
path: root/oslo_rootwrap/client.py
diff options
context:
space:
mode:
Diffstat (limited to 'oslo_rootwrap/client.py')
-rw-r--r--oslo_rootwrap/client.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/oslo_rootwrap/client.py b/oslo_rootwrap/client.py
index 0dd0742..a607be3 100644
--- a/oslo_rootwrap/client.py
+++ b/oslo_rootwrap/client.py
@@ -17,6 +17,7 @@ import logging
from multiprocessing import managers
from multiprocessing import util as mp_util
import threading
+import time
import weakref
import oslo_rootwrap
@@ -41,6 +42,7 @@ except AttributeError:
ClientManager = daemon.get_manager_class()
LOG = logging.getLogger(__name__)
+SHUTDOWN_RETRIES = 3
class Client(object):
@@ -108,10 +110,14 @@ class Client(object):
if process.poll() is None:
LOG.info('Stopping rootwrap daemon process with pid=%s',
process.pid)
- try:
- manager.rootwrap().shutdown()
- except (EOFError, IOError):
- pass # assume it is dead already
+ for _ in range(SHUTDOWN_RETRIES):
+ try:
+ manager.rootwrap().shutdown()
+ break
+ except (EOFError, IOError):
+ break # assume it is dead already
+ except RuntimeError:
+ time.sleep(0.2)
# We might want to wait for process to exit or kill it, but we
# can't provide sane timeout on 2.x and we most likely don't have
# permisions to do so