Deadlock and a rather weird stacktrace
Vincent
vvanbeveren at gmail.com
Thu Mar 10 04:48:15 EST 2011
Can nobody explain this? Please. how can a sleep() continue in a
__bootstrap() ?
Regards,
Vincent
On 4 feb, 13:39, Vincent van Beveren <V.vanBeve... at rijnhuizen.nl>
wrote:
> Hi everyone,
>
> I'm currently working on a multithreaded GUI system in Python 2.6. In this system I use conditions to coordinate synchronization. However, one condition suddenly locks, without any cause. As a last resort I have written a small routine to dump all the stack traces.
>
> def dumpAllStacks(self):
> for threadId, stack in sys._current_frames().items():
> print "Thread with Id: %s" % threadId
> traceback.print_stack(stack)
>
> When the system is dead-locked, I invoke this method. One stack-trace strikes me as odd:
>
> Thread with Id: 1568
> File "c:\PYTHON26\lib\threading.py", line 497, in __bootstrap
> self.__bootstrap_inner()
> File "c:\PYTHON26\lib\threading.py", line 525, in __bootstrap_inner
> self.run()
> File "c:\PYTHON26\lib\threading.py", line 477, in run
> self.__target(*self.__args, **self.__kwargs)
> File "c:\PYTHON26\lib\site-packages\magnum\gui\autogui.py", line 2558, in __sendDataLoop
> self.__sendDataCondition.wait(1)
> File "c:\PYTHON26\lib\threading.py", line 256, in wait
> _sleep(delay)
> File "c:\PYTHON26\lib\threading.py", line 497, in __bootstrap
> self.__bootstrap_inner() <<===== What?
> File "c:\PYTHON26\lib\threading.py", line 525, in __bootstrap_inner
> self.run()
> File "c:\PYTHON26\lib\site-packages\magnum\subsys\__init__.py", line 2242, in run
> self.updateTask()
> File "c:\PYTHON26\lib\site-packages\magnum\subsys\__init__.py", line 2214, in updateTask
> self.statusServerModule.updateTaskWithConnection(self.statusServerConnection)
> File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\modules.py", line 2450, in updateTaskWithConnection
> self.updateDataWithConnection(connection, updateAll)
> File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\modules.py", line 2488, in updateDataWithConnection
> self.updateVariableData(varDataDict, frozenset(varDataDict))
> File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\modules.py", line 796, in updateVariableData
> self.cmdMgr.updateVariableData(self.moduleId, varDataDict, forceVarIdSet) # after this varMgr makes deepcopy
> File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\managers.py", line 441, in updateVariableData
> self.notifyUpdateReport(updatedData)
> File "c:\PYTHON26\lib\site-packages\magnum\subsys\shared\managers.py", line 493, in notifyUpdateReport
> with self.updateReportCondition:
> File "c:\PYTHON26\lib\threading.py", line 205, in __enter__
> return self.__lock.__enter__()
> File "c:\PYTHON26\lib\threading.py", line 121, in acquire
> rc = self.__block.acquire(blocking)
>
> Can someone tell me how the sleep of one thread can continue as the 'run' of another? Is this normal? Thanks in advance!
>
> Regards,Vincentvan Beveren
>
> ___
> Ing. V. van Beveren
> Software Engineer, FOM Rijnhuizen
> T: +31 (0) 30-6096769
> E: V.vanBeve... at rijnhuizen.nl
More information about the Python-list
mailing list