--- a/plugger.py Mon Dec 07 14:44:58 2009 +0100
+++ b/plugger.py Mon Dec 07 20:41:42 2009 +0100
@@ -1586,7 +1586,7 @@
self.IECdebug_lock.acquire()
for IECPath,data_tuple in self.IECdebug_datas.iteritems():
- WeakCallableDict, data_log, status = data_tuple
+ WeakCallableDict, data_log, status, fvalue = data_tuple if len(WeakCallableDict) == 0:
# Callable Dict is empty.
# This variable is not needed anymore!
@@ -1596,7 +1596,7 @@
Idx, IEC_Type = self._IECPathToIdx.get(IECPath,(None,None))
- Idxs.append((Idx, IEC_Type, IECPath))
+ Idxs.append((Idx, IEC_Type, IECPath, fvalue)) self.logger.write_warning(_("Debug : Unknown variable %s\n")%IECPath)
for IECPathToPop in IECPathsToPop:
@@ -1605,7 +1605,7 @@
self.TracedIECPath = zip(*Idxs)[2]
- self._connector.SetTraceVariablesList(zip(*zip(*Idxs)[0:2]))
+ self._connector.SetTraceVariablesList(zip(*zip(*Idxs)[0:3])) self._connector.SetTraceVariablesList([])
@@ -1644,7 +1644,8 @@
WeakKeyDictionary(), # Callables
[], # Data storage [(tick, data),...]
- "Registered"] # Variable status
+ "Registered", # Variable status self.IECdebug_datas[IECPath] = IECdebug_data
IECdebug_data[0][callableobj]=(args, kwargs)
@@ -1672,22 +1673,49 @@
self.ReArmDebugRegisterTimer()
- def ForceDebugIECVariable(self, IECPath, value):
+ def ForceDebugIECVariable(self, IECPath, fvalue): + if not self.IECdebug_datas.has_key(IECPath): + self.IECdebug_lock.acquire() + # If no entry exist, create a new one with a fresh WeakKeyDictionary + IECdebug_data = self.IECdebug_datas.get(IECPath, None) + IECdebug_data[2] = "Forced" + IECdebug_data[3] = fvalue + self.IECdebug_lock.release() + self.ReArmDebugRegisterTimer() def ReleaseDebugIECVariable(self, IECPath):
+ if not self.IECdebug_datas.has_key(IECPath): + self.IECdebug_lock.acquire() + # If no entry exist, create a new one with a fresh WeakKeyDictionary + IECdebug_data = self.IECdebug_datas.get(IECPath, None) + IECdebug_data[2] = "Registered" + IECdebug_data[3] = None + self.IECdebug_lock.release() + self.ReArmDebugRegisterTimer() def CallWeakcallables(self, IECPath, function_name, *cargs):
data_tuple = self.IECdebug_datas.get(IECPath, None)
if data_tuple is not None:
- WeakCallableDict, data_log, status = data_tuple
+ WeakCallableDict, data_log, status, fvalue = data_tuple #data_log.append((debug_tick, value))
for weakcallable,(args,kwargs) in WeakCallableDict.iteritems():
#print weakcallable, value, args, kwargs
function = getattr(weakcallable, function_name, None)
- function(*(cargs + args), **kwargs)
+ function(*(cargs + [True] + args), **kwargs) + function(*(cargs + args), **kwargs) # This will block thread if more than one call is waiting
def DebugThreadProc(self):