summaryrefslogtreecommitdiff
path: root/pysnmp/proto
diff options
context:
space:
mode:
authorelie <elie>2013-05-04 14:59:28 +0000
committerelie <elie>2013-05-04 14:59:28 +0000
commitea06d03578fd14757215eb7914c54234a3d97e52 (patch)
tree5fab8e15a21c2d31f5d29155b3a062cd0cf3a420 /pysnmp/proto
parent2855379f969cec57a9f9003300f63ce7cb5264db (diff)
downloadpysnmp-ea06d03578fd14757215eb7914c54234a3d97e52.tar.gz
fix to exceptions handling at MsgAndPduDispatcher.sendPdu() to avoid
sendPduHandle miss (followed by system crash) on cache expiration run
Diffstat (limited to 'pysnmp/proto')
-rw-r--r--pysnmp/proto/rfc3412.py16
1 files changed, 13 insertions, 3 deletions
diff --git a/pysnmp/proto/rfc3412.py b/pysnmp/proto/rfc3412.py
index 391ebd4..506494b 100644
--- a/pysnmp/proto/rfc3412.py
+++ b/pysnmp/proto/rfc3412.py
@@ -156,16 +156,26 @@ class MsgAndPduDispatcher:
)
debug.logger & debug.flagDsp and debug.logger('sendPdu: MP succeeded')
except error.StatusInformation:
+ if expectResponse:
+ self.__cache.pop(sendPduHandle)
# XXX is it still needed here?
# self.releaseStateInformation(snmpEngine, sendPduHandle, messageProcessingModel)
raise
# 4.1.1.6
if snmpEngine.transportDispatcher is None:
+ if expectResponse:
+ self.__cache.pop(sendPduHandle)
raise error.PySnmpError('Transport dispatcher not set')
- snmpEngine.transportDispatcher.sendMessage(
- outgoingMessage, destTransportDomain, destTransportAddress
+
+ try:
+ snmpEngine.transportDispatcher.sendMessage(
+ outgoingMessage, destTransportDomain, destTransportAddress
)
+ except PySnmpError:
+ if expectResponse:
+ self.__cache.pop(sendPduHandle)
+ raise
# Update cache with orignal req params (used for retrying)
if expectResponse:
@@ -180,7 +190,7 @@ class MsgAndPduDispatcher:
contextName=contextName,
pduVersion=pduVersion,
PDU=PDU
- )
+ )
return sendPduHandle