1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102
|
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).
#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)
|