summaryrefslogtreecommitdiff
path: root/pysnmp/carrier
diff options
context:
space:
mode:
authorelie <elie>2013-03-15 20:50:24 +0000
committerelie <elie>2013-03-15 20:50:24 +0000
commitdd85f9d672e0767beafa55810ac3b3342d35d302 (patch)
tree4db50be9e3036aded263be3a64a915f2bb8584f5 /pysnmp/carrier
parent11abdaef66b3b2be7e21de51ab5ac44a43f18112 (diff)
downloadpysnmp-dd85f9d672e0767beafa55810ac3b3342d35d302.tar.gz
fix of rounding error to base I/O dispatcher's next timer call calculation
Diffstat (limited to 'pysnmp/carrier')
-rw-r--r--pysnmp/carrier/base.py8
1 files changed, 5 insertions, 3 deletions
diff --git a/pysnmp/carrier/base.py b/pysnmp/carrier/base.py
index 4aa0105..bb2424e 100644
--- a/pysnmp/carrier/base.py
+++ b/pysnmp/carrier/base.py
@@ -27,6 +27,7 @@ class AbstractTransportDispatcher:
self.__timerCallables = []
self.__ticks = 0
self.__timerResolution = 0.5
+ self.__timerDelta = self.__timerResolution * 0.05
self.__nextTime = 0
def _cbFun(self, incomingTransport, transportAddress, incomingMessage):
@@ -112,18 +113,19 @@ class AbstractTransportDispatcher:
if timerResolution < 0.01 or timerResolution > 10:
raise error.CarrierError('Impossible timer resolution')
self.__timerResolution = timerResolution
+ self.__timerDelta = timerResolution * 0.05
def getTimerTicks(self): return self.__ticks
def handleTimerTick(self, timeNow):
if self.__nextTime == 0: # initial initialization
- self.__nextTime = timeNow + self.__timerResolution
+ self.__nextTime = timeNow + self.__timerResolution - self.__timerDelta
- if self.__nextTime > timeNow:
+ if self.__nextTime >= timeNow:
return
self.__ticks += 1
- self.__nextTime = timeNow + self.__timerResolution
+ self.__nextTime = timeNow + self.__timerResolution - self.__timerDelta
for timerCallable in self.__timerCallables:
timerCallable(timeNow)