summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelie <elie>2010-06-28 16:02:37 +0000
committerelie <elie>2010-06-28 16:02:37 +0000
commit3f0b5d7b91c9ba9cd182dc153e3f42c7ab3b3dda (patch)
tree8678992425d649c9f9521e9045f402b5db6debb2
parent37ae1865458decb5b71f4d5705e9717789ff82f4 (diff)
downloadpysnmp-3f0b5d7b91c9ba9cd182dc153e3f42c7ab3b3dda.tar.gz
* MibScalarInstance.createUndo() fixed to invoke writeUndo(), not
writeCleanup * MibTableColumn.createUndo() now handles possible uninitialized pyasn1 values
-rw-r--r--pysnmp/smi/mibs/SNMPv2-SMI.py14
1 files changed, 10 insertions, 4 deletions
diff --git a/pysnmp/smi/mibs/SNMPv2-SMI.py b/pysnmp/smi/mibs/SNMPv2-SMI.py
index 25241e8..d633280 100644
--- a/pysnmp/smi/mibs/SNMPv2-SMI.py
+++ b/pysnmp/smi/mibs/SNMPv2-SMI.py
@@ -3,7 +3,7 @@ from pysnmp.smi.indices import OidOrderedDict
from pysnmp.smi import exval, error
from pysnmp.proto import rfc1902
from pyasn1.type import constraint
-from pyasn1.error import ValueConstraintError
+from pyasn1.error import ValueConstraintError, PyAsn1Error
from pysnmp import debug
( Integer, ObjectIdentifier, Null ) = mibBuilder.importSymbols("ASN1", "Integer", "ObjectIdentifier", "Null")
@@ -490,7 +490,7 @@ class MibScalarInstance(MibTree):
self.writeCleanup(name, val, idx, (acFun, acCtx))
def createUndo(self, name, val, idx, (acFun, acCtx)):
if val is not None:
- self.writeCleanup(name, val, idx, (acFun, acCtx))
+ self.writeUndo(name, val, idx, (acFun, acCtx))
# Destroy operation
@@ -592,12 +592,18 @@ class MibTableColumn(MibScalar):
# Set back previous column instance, drop the new one
if self.__createdInstances.has_key(name):
self._vars[name] = self.__createdInstances[name]
- del self.__createdInstances[name]
+ del self.__createdInstances[name]
# Remove new instance on rollback
if self._vars[name] is None:
del self._vars[name]
else:
- self._vars[name].createUndo(name, val, idx, (acFun, acCtx))
+ # Catch half-created instances (hackerish)
+ try:
+ self._vars[name] == 0
+ except PyAsn1Error:
+ del self._vars[name]
+ else:
+ self._vars[name].createUndo(name, val, idx, (acFun, acCtx))
# Column destruction