aboutsummaryrefslogtreecommitdiffstats
path: root/src/libcharon/plugins/vici/python
diff options
context:
space:
mode:
authorMartin Willi <martin@revosec.ch>2015-03-09 12:06:38 +0100
committerMartin Willi <martin@revosec.ch>2015-03-18 13:59:14 +0100
commit90c5b48c96d7d34fbc446660449892f3bd3b9040 (patch)
treef9ab6632ee59aaea0540d5f76f65f94f71087bce /src/libcharon/plugins/vici/python
parent288b6541739bb2e6ff766fbb8e7a803b3caf1f12 (diff)
downloadstrongswan-90c5b48c96d7d34fbc446660449892f3bd3b9040.tar.bz2
strongswan-90c5b48c96d7d34fbc446660449892f3bd3b9040.tar.xz
vici: Catch Python GeneratorExit to properly cancel streamed event iteration
Diffstat (limited to 'src/libcharon/plugins/vici/python')
-rw-r--r--src/libcharon/plugins/vici/python/vici/session.py8
1 files changed, 7 insertions, 1 deletions
diff --git a/src/libcharon/plugins/vici/python/vici/session.py b/src/libcharon/plugins/vici/python/vici/session.py
index 65b89b5ba..da79ecd64 100644
--- a/src/libcharon/plugins/vici/python/vici/session.py
+++ b/src/libcharon/plugins/vici/python/vici/session.py
@@ -281,10 +281,16 @@ class SessionHandler(object):
# issue command, and read any event messages
packet = Packet.request(command, message)
self.transport.send(packet)
+ exited = False
while True:
response = Packet.parse(self.transport.receive())
if response.response_type == Packet.EVENT:
- yield Message.deserialize(response.payload)
+ if not exited:
+ try:
+ yield Message.deserialize(response.payload)
+ except GeneratorExit:
+ exited = True
+ pass
else:
break