summaryrefslogtreecommitdiffstats
path: root/module/obmc/wsgi/apps/rest_dbus.py
diff options
context:
space:
mode:
Diffstat (limited to 'module/obmc/wsgi/apps/rest_dbus.py')
-rw-r--r--module/obmc/wsgi/apps/rest_dbus.py19
1 files changed, 15 insertions, 4 deletions
diff --git a/module/obmc/wsgi/apps/rest_dbus.py b/module/obmc/wsgi/apps/rest_dbus.py
index bf7db41..a0f6e4d 100644
--- a/module/obmc/wsgi/apps/rest_dbus.py
+++ b/module/obmc/wsgi/apps/rest_dbus.py
@@ -967,22 +967,26 @@ class EventNotifier:
self.wsock = wsock
self.paths = filters.get("paths", [])
self.interfaces = filters.get("interfaces", [])
+ self.signals = []
+ self.socket_error = False
if not self.paths:
self.paths.append(None)
bus = dbus.SystemBus()
# Add a signal receiver for every path the client is interested in
for path in self.paths:
- bus.add_signal_receiver(
+ add_sig = bus.add_signal_receiver(
self.interfaces_added_handler,
dbus_interface=dbus.BUS_DAEMON_IFACE + '.ObjectManager',
signal_name='InterfacesAdded',
path=path)
- bus.add_signal_receiver(
+ chg_sig = bus.add_signal_receiver(
self.properties_changed_handler,
dbus_interface=dbus.PROPERTIES_IFACE,
signal_name='PropertiesChanged',
path=path,
path_keyword='path')
+ self.signals.append(add_sig)
+ self.signals.append(chg_sig)
loop = gobject.MainLoop()
# gobject's mainloop.run() will block the entire process, so the gevent
# scheduler and hence greenlets won't execute. The while-loop below
@@ -991,6 +995,11 @@ class EventNotifier:
gcontext = loop.get_context()
while loop is not None:
try:
+ if self.socket_error:
+ for signal in self.signals:
+ signal.remove()
+ loop.quit()
+ break;
if gcontext.pending():
gcontext.iteration()
else:
@@ -1011,7 +1020,8 @@ class EventNotifier:
response[self.keyNames['intfMap']] = iprops
try:
self.wsock.send(json.dumps(response))
- except WebSocketError:
+ except:
+ self.socket_error = True
return
def properties_changed_handler(self, interface, new, old, **kw):
@@ -1026,7 +1036,8 @@ class EventNotifier:
response[self.keyNames['propMap']] = new
try:
self.wsock.send(json.dumps(response))
- except WebSocketError:
+ except:
+ self.socket_error = True
return
OpenPOWER on IntegriCloud