summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorelie <elie>2013-06-30 16:00:14 +0000
committerelie <elie>2013-06-30 16:00:14 +0000
commit6c60f5b3c308847858f669a0000d9b7a7cb6a83c (patch)
treef0240f6921eff1a53f049098d5f47a3f8feb3d79
parent44c3c20d6c8eb6c59e0d62af10c86906b91d8160 (diff)
downloadpysnmp-6c60f5b3c308847858f669a0000d9b7a7cb6a83c.tar.gz
whenever addTransport() automatically instantiates transportDispatcher,
it takes note of this and further counts all transport registration. If delTransoport() seems that transportDispatcher was automatically instantiated, it shutdowns it automatically whenever registered transport count reaches zero.
-rw-r--r--pysnmp/entity/config.py12
1 files changed, 11 insertions, 1 deletions
diff --git a/pysnmp/entity/config.py b/pysnmp/entity/config.py
index 55e0e67..f5e9f53 100644
--- a/pysnmp/entity/config.py
+++ b/pysnmp/entity/config.py
@@ -315,15 +315,25 @@ def addTransport(snmpEngine, transportDomain, transport):
snmpEngine.registerTransportDispatcher(
transport.protoTransportDispatcher()
)
+ # here we note that we have created transportDispatcher automatically
+ snmpEngine.cache['automaticTransportDispatcher'] = 0
snmpEngine.transportDispatcher.registerTransport(
transportDomain, transport
)
+ if 'automaticTransportDispatcher' in snmpEngine.cache:
+ snmpEngine.cache['automaticTransportDispatcher'] += 1
def delTransport(snmpEngine, transportDomain):
if not snmpEngine.transportDispatcher:
return
snmpEngine.transportDispatcher.unregisterTransport(transportDomain)
- snmpEngine.unregisterTransportDispatcher()
+ # automatically shutdown automatically created transportDispatcher
+ if 'automaticTransportDispatcher' in snmpEngine.cache:
+ snmpEngine.cache['automaticTransportDispatcher'] -= 1
+ if not snmpEngine.cache['automaticTransportDispatcher']:
+ snmpEngine.transportDispatcher.closeDispatcher()
+ snmpEngine.unregisterTransportDispatcher()
+ del snmpEngine.cache['automaticTransportDispatcher']
addSocketTransport = addTransport
delSocketTransport = delTransport