summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniil Baturin <daniil@baturin.org>2019-06-16 11:19:34 +0200
committerDaniil Baturin <daniil@baturin.org>2019-06-16 11:19:34 +0200
commit303e8cb27560ade4bf0c9e6b9bc453c2f00fe799 (patch)
tree6e07f506fb0822e39c7d2eabe6a2ed4a4a61fb84
parent6b5f0dd5e59b4e0b0170a087a50bfd61bc5f14ac (diff)
downloadvyos-1x-303e8cb27560ade4bf0c9e6b9bc453c2f00fe799.tar.gz
vyos-1x-303e8cb27560ade4bf0c9e6b9bc453c2f00fe799.zip
T1432: add a finalizer to vyos.configsession to avoid leaking sessions.
-rw-r--r--python/vyos/configsession.py10
1 files changed, 10 insertions, 0 deletions
diff --git a/python/vyos/configsession.py b/python/vyos/configsession.py
index a27470eeb..39a9713e0 100644
--- a/python/vyos/configsession.py
+++ b/python/vyos/configsession.py
@@ -14,6 +14,7 @@
import os
import re
+import sys
import subprocess
CLI_SHELL_API = '/bin/cli-shell-api'
@@ -50,6 +51,7 @@ class ConfigSession(object):
"""
env_str = subprocess.check_output([CLI_SHELL_API, 'getSessionEnv', str(session_id)])
+ self.__session_id = session_id
# Extract actual variables from the chunk of shell it outputs
# XXX: it's better to extend cli-shell-api to provide easily readable output
@@ -64,6 +66,14 @@ class ConfigSession(object):
self.__run_command([CLI_SHELL_API, 'setupSession'])
+ def __del__(self):
+ try:
+ output = subprocess.check_output([CLI_SHELL_API, 'teardownSession'], env=self.__session_env).decode().strip()
+ if output:
+ print("cli-shell-api teardownSession output for sesion {0}: {1}".format(self.__session_id, output), file=sys.stderr)
+ except Exception as e:
+ print("Could not tear down session {0}: {1}".format(self.__session_id, e), file=sys.stderr)
+
def __run_command(self, cmd_list):
p = subprocess.Popen(cmd_list, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=self.__session_env)
result = p.wait()