This is an automated email from the git hooks/post-receive script. x2go pushed a commit to branch master in repository python-x2go. commit 3ed4fed3465e02c605c80e057c265ca4a5d4b2ac Author: Mike Gabriel <mike.gabriel@das-netzwerkteam.de> Date: Tue May 9 12:24:20 2017 +0200 Don't blindly release gevent locked. We need to checked if a semaphore is locked in some case and only then release it. (Fixes: #1016). --- debian/changelog | 3 +++ x2go/backends/control/plain.py | 15 ++++++++++----- x2go/backends/terminal/plain.py | 3 ++- x2go/session.py | 3 ++- 4 files changed, 17 insertions(+), 7 deletions(-) diff --git a/debian/changelog b/debian/changelog index aeca116..cd549f0 100644 --- a/debian/changelog +++ b/debian/changelog @@ -3,6 +3,9 @@ python-x2go (0.5.0.5-0x2go1) UNRELEASED; urgency=low [ Mike Gabriel ] * New upstream version (0.5.0.5): - documentation: Fix wording in docstring. + - Don't blindly release gevent locked. We need to checked if a + semaphore is locked in some case and only then release it. + (Fixes: #1016). [ Mihai Moldovan ] * New upstream version (0.5.0.5): diff --git a/x2go/backends/control/plain.py b/x2go/backends/control/plain.py index 73807e5..3dcc3ef 100644 --- a/x2go/backends/control/plain.py +++ b/x2go/backends/control/plain.py @@ -324,7 +324,8 @@ class X2GoControlSession(paramiko.SSHClient): timer.cancel() self.sftp_client = None - self._transport_lock.release() + if self._transport_lock.locked(): + self._transport_lock.release() def _x2go_sftp_write(self, remote_path, content, timeout=20): """ @@ -380,7 +381,8 @@ class X2GoControlSession(paramiko.SSHClient): timer.cancel() self.sftp_client = None - self._transport_lock.release() + if self._transport_lock.locked(): + self._transport_lock.release() def _x2go_sftp_remove(self, remote_path, timeout=20): """ @@ -431,7 +433,8 @@ class X2GoControlSession(paramiko.SSHClient): timer.cancel() self.sftp_client = None - self._transport_lock.release() + if self._transport_lock.locked(): + self._transport_lock.release() def _x2go_exec_command(self, cmd_line, loglevel=log.loglevel_INFO, timeout=20, **kwargs): """ @@ -520,7 +523,8 @@ class X2GoControlSession(paramiko.SSHClient): self._transport_lock.release() raise x2go_exceptions.X2GoControlSessionException('the X2Go control session is not connected (while issuing SSH command=%s)' % cmd) - self._transport_lock.release() + if self._transport_lock.locked(): + self._transport_lock.release() # sanitized X2Go relevant data, protect against data injection via .bashrc files (_stdin, _stdout, _stderr) = _retval @@ -1204,7 +1208,8 @@ class X2GoControlSession(paramiko.SSHClient): self._session_auth_rsakey = None # in any case, release out internal transport lock - self._transport_lock.release() + if self._transport_lock.locked(): + self._transport_lock.release() # close SSH agent auth forwarding objects if self.agent_handler is not None: diff --git a/x2go/backends/terminal/plain.py b/x2go/backends/terminal/plain.py index 786ad8d..1ea43ea 100644 --- a/x2go/backends/terminal/plain.py +++ b/x2go/backends/terminal/plain.py @@ -421,7 +421,8 @@ class X2GoTerminalSession(object): - clear the session info """ - self._share_local_folder_lock.release() + if self._share_local_folder_lock.locked(): + self._share_local_folder_lock.release() self.release_telekinesis() self.release_proxy() self.session_window = None diff --git a/x2go/session.py b/x2go/session.py index d37c038..b1f836d 100644 --- a/x2go/session.py +++ b/x2go/session.py @@ -1374,7 +1374,8 @@ class X2GoSession(object): self.terminated = None self.faults = None self.active = False - self._lock.release() + if self._lock.locked(): + self._lock.release() self.unset_master_session() try: self.update_status(force_update=True) -- Alioth's /srv/git/code.x2go.org/python-x2go.git//..//_hooks_/post-receive-email on /srv/git/code.x2go.org/python-x2go.git