diff options
author | elie <elie> | 2013-05-04 14:59:28 +0000 |
---|---|---|
committer | elie <elie> | 2013-05-04 14:59:28 +0000 |
commit | ea06d03578fd14757215eb7914c54234a3d97e52 (patch) | |
tree | 5fab8e15a21c2d31f5d29155b3a062cd0cf3a420 /pysnmp/proto | |
parent | 2855379f969cec57a9f9003300f63ce7cb5264db (diff) | |
download | pysnmp-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.py | 16 |
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 |