[X2Go-Commits] python-x2go.git - build-baikal (branch) updated: 0.1.1.4-58-g1b8e6a3

X2Go dev team git-admin at x2go.org
Wed Jan 8 15:26:44 CET 2014


The branch, build-baikal has been updated
       via  1b8e6a3ffe35e2068d27220399c4f179e0542d10 (commit)
      from  a04eec2fc959054572bed038ede4824ac379d11b (commit)

Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.

- Log -----------------------------------------------------------------
-----------------------------------------------------------------------

Summary of changes:
 x2go/backends/control/_stdout.py  |    8 ++++----
 x2go/backends/terminal/_stdout.py |   33 ++++++++++++++++++++++++++-------
 x2go/client.py                    |    4 +++-
 x2go/session.py                   |   11 +++++++----
 4 files changed, 40 insertions(+), 16 deletions(-)

The diff of changes is:
diff --git a/x2go/backends/control/_stdout.py b/x2go/backends/control/_stdout.py
index 5b5b63a..74bc797 100644
--- a/x2go/backends/control/_stdout.py
+++ b/x2go/backends/control/_stdout.py
@@ -758,7 +758,7 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
 
             return _listsessions
 
-    def clean_sessions(self):
+    def clean_sessions(self, destroy_terminals=True):
         """\
         Find X2go terminals that have previously been started by the
         connected user on the remote X2go server and terminate them.
@@ -766,7 +766,7 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
         """
         session_list = self.list_sessions()
         for session_name in session_list.keys():
-            self.terminate(session_name=session_name)
+            self.terminate(session_name=session_name, destroy_terminals=destroy_terminals)
 
     def is_connected(self):
         """\
@@ -873,7 +873,7 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
 
         return _ret
 
-    def terminate(self, session_name):
+    def terminate(self, session_name, destroy_terminals=True):
         """\
         Terminate either this or another available X2go session on the connected
         server.
@@ -898,7 +898,7 @@ class X2goControlSessionSTDOUT(paramiko.SSHClient):
             dummy_stdout = stdout.read()
             dummy_stderr = stderr.read()
             if self.associated_terminals.has_key(session_name):
-                if self.associated_terminals[session_name] is not None:
+                if self.associated_terminals[session_name] is not None and destroy_terminals:
                     self.associated_terminals[session_name].__del__()
                 try: del self.associated_terminals[session_name]
                 except KeyError: pass
diff --git a/x2go/backends/terminal/_stdout.py b/x2go/backends/terminal/_stdout.py
index c48bcd2..7289d80 100644
--- a/x2go/backends/terminal/_stdout.py
+++ b/x2go/backends/terminal/_stdout.py
@@ -326,6 +326,8 @@ class X2goTerminalSessionSTDOUT(object):
         else:
             self.session_info = info_backend()
 
+        self._cleaned_up = False
+
     def __del__(self):
         self._x2go_tidy_up()
 
@@ -351,7 +353,6 @@ class X2goTerminalSessionSTDOUT(object):
         except AttributeError:
             pass
 
-        # destroy current session information
         self.session_info.clear()
 
     def _mk_sessions_rootdir(self, d):
@@ -367,8 +368,13 @@ class X2goTerminalSessionSTDOUT(object):
 
     def _rm_session_dirtree(self):
 
-        if self.session_info:
-            shutil.rmtree(self.session_info.name, ignore_errors=True)
+        if self.session_info.name:
+            shutil.rmtree('%s/S-%s' % (self.params.rootdir, self.session_info), ignore_errors=True)
+
+    def _rm_desktop_dirtree(self):
+
+        if self.session_info.display:
+            shutil.rmtree('%s/S-%s' % (self.params.rootdir, self.session_info.display), ignore_errors=True)
 
     def get_session_name(self):
         """\
@@ -1029,8 +1035,10 @@ class X2goTerminalSessionSTDOUT(object):
         @rtype: bool
 
         """
-        self.control_session.terminate(session_name=self.session_info.name)
+        self.control_session.terminate(session_name=self.session_info.name, destroy_terminals=False)
         self.release_proxy()
+        self.post_terminate_cleanup()
+        self.__del__()
 
         # TODO: check if session has really suspended
         _ret = True
@@ -1050,7 +1058,18 @@ class X2goTerminalSessionSTDOUT(object):
         STILL UNDOCUMENTED
 
         """
-        # if we run in debug mode, we keep local session directories
-        if self.logger.get_loglevel() & log.loglevel_DEBUG != log.loglevel_DEBUG:
+        # this method might be called twice (directly and from update_status in the session
+        # registry instance. So we have to make sure, that this code will not fail
+        # if called twice.
+        if not self._cleaned_up and self.session_info.name:
+
             # otherwise we wipe the session files locally
-            self._rm_session_dirtree()
+            self.logger('cleaning up session %s after termination' % self.session_info, loglevel=log.loglevel_NOTICE)
+
+            # if we run in debug mode, we keep local session directories
+            if self.logger.get_loglevel() & log.loglevel_DEBUG != log.loglevel_DEBUG:
+
+                self._rm_session_dirtree()
+                self._rm_desktop_dirtree()
+
+            self._cleaned_up = True
diff --git a/x2go/client.py b/x2go/client.py
index 4ff7cd1..e8b85b5 100644
--- a/x2go/client.py
+++ b/x2go/client.py
@@ -319,6 +319,7 @@ class X2goClient(object):
                                                     refresh_interval=refresh_interval,
                                                     logger=self.logger
                                                    )
+        self.auto_update_sessionregistry = auto_update_sessionregistry
 
         if use_listsessions_cache:
             self.listsessions_cache = X2goListSessionsCache(self, logger=self.logger)
@@ -2010,8 +2011,9 @@ class X2goClient(object):
         @type session_uuid: C{str}
 
         """
+        _destroy_terminals = not ( self.auto_update_sessionregistry == True)
         session = self.session_registry(session_uuid)
-        session.clean_sessions()
+        session.clean_sessions(destroy_terminals=_destroy_terminals)
     __clean_sessions = clean_sessions
 
     def list_sessions(self, session_uuid=None, 
diff --git a/x2go/session.py b/x2go/session.py
index ddb8b3b..65c9689 100644
--- a/x2go/session.py
+++ b/x2go/session.py
@@ -853,13 +853,13 @@ class X2goSession(object):
         return self.connected
     __is_alive = is_alive
 
-    def clean_sessions(self):
+    def clean_sessions(self, destroy_terminals=True):
         """\
         Clean all running sessions for the authenticated user on the remote X2go server.
 
         """
         if self.is_alive():
-            self.control_session.clean_sessions()
+            self.control_session.clean_sessions(destroy_terminals=destroy_terminals)
         else:
             self._X2goSession__disconnect()
     __clean_sessions = clean_sessions
@@ -1514,10 +1514,13 @@ class X2goSession(object):
             self.terminal_session.release_proxy()
 
         # unmount shared folders
-        self.unshare_all_local_folders()
+        try:
+            self.unshare_all_local_folders()
+        except X2goSessionException:
+            pass
 
         # remove client-side session cache
-        if self.terminated:
+        if self.terminated and self.has_terminal_session():
             self.terminal_session.post_terminate_cleanup()
 
         # destroy terminal session


hooks/post-receive
-- 
python-x2go.git (Python X2Go Client API)

This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "python-x2go.git" (Python X2Go Client API).




More information about the x2go-commits mailing list