[paramiko] paramiko stops responding after huge data is transferred !
Dwayne Litzenberger
dwayne at oscl.ca
Mon Apr 14 17:02:25 PDT 2008
It's a threading issue.
I managed to catch two threads trying to acquire a Channel.lock at the same time.
It looks like Channel._window_adjust (or other like functions) are sometimes
being called by threads that do not hold the Channel.lock.
Here are the tracebacks of the two threads on the server (ignore the lockwrapper.py stuff):
==================================
id=-1214578356,thread=MySenderThread,name=channel.py:687: ACQUIRED
File "/usr/lib/python2.4/threading.py", line 442, in __bootstrap
self.run()
File "/usr/lib/python2.4/threading.py", line 422, in run
self.__target(*self.__args, **self.__kwargs)
File "./test-server.py", line 39, in _run
wfile.write(a.encrypt("X" * 1024))
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/file.py", line 330, in write
self.flush()
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/file.py", line 91, in flush
self._write_all(self._wbuffer.getvalue())
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/file.py", line 435, in _write_all
count = self._write(data)
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/channel.py", line 1211, in _write
self.channel.sendall(data)
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/channel.py", line 760, in sendall
sent = self.send(s)
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/channel.py", line 687, in send
self.lock.acquire()
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/lockwrapper.py", line 43, in acquire
self._log("ACQUIRED")
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/lockwrapper.py", line 23, in _log
rawdata += "".join(traceback.format_stack())
==================================
id=-1214578356,thread=Transport,name=channel.py:955: ACQUIRING
File "/usr/lib/python2.4/threading.py", line 442, in __bootstrap
self.run()
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/transport.py", line 1528, in run
self._channel_handler_table[ptype](chan, m)
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/channel.py", line 955, in _window_adjust
self.lock.acquire()
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/lockwrapper.py", line 41, in acquire
self._log("ACQUIRING")
File "/home/dwon/rsync-link-backup/paramiko-deadlock-bug/paramiko/lockwrapper.py", line 23, in _log
rawdata += "".join(traceback.format_stack())
--
Dwayne Litzenberger, B.A.Sc.
Information Technology Analyst
Open Systems Canada Limited
#210 - 2332 11th Ave
Regina, SK S4P0K1
Office: (306) 359-OSCL (6725)
http://www.oscl.ca/
More information about the paramiko
mailing list