From e7807d3dd59ab19302809b776bae245908ee5c6a Mon Sep 17 00:00:00 2001
From: Stefano Borini <sborini@enthought.com>
Date: Thu, 10 Aug 2017 13:22:12 +0100
Subject: [PATCH] Handle failure to finalize listeners in a more elegant way

---
 force_bdss/core_mco_driver.py | 34 ++++++++++++++++------------------
 1 file changed, 16 insertions(+), 18 deletions(-)

diff --git a/force_bdss/core_mco_driver.py b/force_bdss/core_mco_driver.py
index ee22353..c8e8aea 100644
--- a/force_bdss/core_mco_driver.py
+++ b/force_bdss/core_mco_driver.py
@@ -36,13 +36,7 @@ class CoreMCODriver(BaseCoreDriver):
     @on_trait_change("application:stopping")
     def application_stopping(self):
         for listener in self.listeners:
-            try:
-                listener.finalize(None)
-            except Exception as e:
-                log.error(
-                    "Failed to finalize "
-                    "listener {}: {}".format(
-                        listener.__class__.__name__, str(e)))
+            self._finalize_listener(listener)
 
     def _mco_default(self):
         try:
@@ -66,17 +60,7 @@ class CoreMCODriver(BaseCoreDriver):
                         listener.__class__.__name__,
                         str(e)
                     ))
-
-                try:
-                    listener.finalize()
-                except Exception:
-                    log.error(
-                        "Exception while finalizing listener {}: {}".format(
-                            listener.__class__.__name__,
-                            str(e)
-                        ))
-                    pass
-
+                self._finalize_listener(listener)
                 self.listeners.remove(listener)
 
     def _listeners_default(self):
@@ -95,3 +79,17 @@ class CoreMCODriver(BaseCoreDriver):
                 listeners.append(listener)
 
         return listeners
+
+    def _finalize_listener(self, listener):
+        """Helper method. Finalizes a listener and handles possible
+        exceptions. it does _not_ remove the listener from the listener
+        list.
+        """
+        try:
+            listener.finalize()
+        except Exception as e:
+            log.error(
+                "Exception while finalizing listener {}: {}".format(
+                    listener.__class__.__name__,
+                    str(e)
+                ))
-- 
GitLab