commit 86325e6d124f0b2e5a4826938f2f493495fed9b7 Author: Damian Johnson atagar@torproject.org Date: Thu Jul 28 11:25:07 2011 -0700
fix: pausing interface could cause crash
Creating the pause buffer for the bandwidth graph could trigger a panel redraw, which in turn attempted to use the uninitialized pause value. --- src/cli/graphing/bandwidthStats.py | 11 ++++++++--- src/util/panel.py | 2 +- 2 files changed, 9 insertions(+), 4 deletions(-)
diff --git a/src/cli/graphing/bandwidthStats.py b/src/cli/graphing/bandwidthStats.py index f1891f9..654443c 100644 --- a/src/cli/graphing/bandwidthStats.py +++ b/src/cli/graphing/bandwidthStats.py @@ -35,7 +35,7 @@ class BandwidthStats(graphPanel.GraphStats): Uses tor BW events to generate bandwidth usage graph. """
- def __init__(self, config=None): + def __init__(self, config=None, isPauseBuffer=False): graphPanel.GraphStats.__init__(self)
self.inputConfig = config @@ -56,7 +56,7 @@ class BandwidthStats(graphPanel.GraphStats): # rate/burst and if tor's using accounting conn = torTools.getConn() self._titleStats, self.isAccounting = [], False - self.resetListener(conn, torTools.State.INIT) # initializes values + if not isPauseBuffer: self.resetListener(conn, torTools.State.INIT) # initializes values conn.addStatusListener(self.resetListener)
# Initialized the bandwidth totals to the values reported by Tor. This @@ -78,9 +78,14 @@ class BandwidthStats(graphPanel.GraphStats): self.initialSecondaryTotal = int(writeTotal) / 1024 # Bytes -> KB
def clone(self, newCopy=None): - if not newCopy: newCopy = BandwidthStats(self.inputConfig) + if not newCopy: newCopy = BandwidthStats(self.inputConfig, True) newCopy.accountingLastUpdated = self.accountingLastUpdated newCopy.accountingInfo = self.accountingInfo + + # attributes that would have been initialized from calling the resetListener + newCopy.isAccounting = self.isAccounting + newCopy._titleStats = self._titleStats + return graphPanel.GraphStats.clone(self, newCopy)
def resetListener(self, conn, eventType): diff --git a/src/util/panel.py b/src/util/panel.py index bb47726..732610c 100644 --- a/src/util/panel.py +++ b/src/util/panel.py @@ -186,7 +186,7 @@ class Panel(): """
if not attr in self.pauseAttr: return None - elif self.isPaused(): return self.pauseBuffer[attr] + elif self.paused: return self.pauseBuffer[attr] else: return self.__dict__.get(attr)
def copyAttr(self, attr):