[Checkins] SVN: ZODB/trunk/ Added logic to avoid spurious errors from the logging system on exit.

Jim Fulton jim at zope.com
Thu Feb 15 15:09:37 EST 2007


Log message for revision 72630:
  Added logic to avoid spurious errors from the logging system on exit.
  

Changed:
  U   ZODB/trunk/NEWS.txt
  U   ZODB/trunk/src/ZEO/zrpc/connection.py

-=-
Modified: ZODB/trunk/NEWS.txt
===================================================================
--- ZODB/trunk/NEWS.txt	2007-02-15 20:07:54 UTC (rev 72629)
+++ ZODB/trunk/NEWS.txt	2007-02-15 20:09:36 UTC (rev 72630)
@@ -35,7 +35,7 @@
   use from a few kilobytes to at least multiple hundred megabytes.
 
 
-What's new on ZODB 3.7.0b3?
+What's new on ZODB 3.7.0b4?
 ===========================
 
 Packaging
@@ -56,6 +56,9 @@
 ClientStorage
 -------------
 
+- (3.7b4) Added logic to avoid spurious errors from the logging system
+  on exit.
+
 - (3.7b2) Removed the "sync" mode for ClientStorage.  
 
   Previously, a ClientStorage could be in either "sync" mode or "async"

Modified: ZODB/trunk/src/ZEO/zrpc/connection.py
===================================================================
--- ZODB/trunk/src/ZEO/zrpc/connection.py	2007-02-15 20:07:54 UTC (rev 72629)
+++ ZODB/trunk/src/ZEO/zrpc/connection.py	2007-02-15 20:09:36 UTC (rev 72630)
@@ -12,6 +12,7 @@
 #
 ##############################################################################
 import asyncore
+import atexit
 import errno
 import select
 import sys
@@ -39,6 +40,7 @@
 client_map = {}
 client_trigger = trigger(client_map)
 client_logger = logging.getLogger('ZEO.zrpc.client_loop')
+atexit.register(client_map.clear)
 
 def client_loop():
     map = client_map
@@ -106,18 +108,26 @@
                 _exception(obj)
 
         except:
-            client_logger.critical('The ZEO cient loop failed.',
-                            exc_info=sys.exc_info())
-            for fd, obj in map.items():
-                if obj is client_trigger:
-                    continue
+            if map:
                 try:
-                    obj.mgr.client.close()
+                    client_logger.critical('The ZEO cient loop failed.',
+                                           exc_info=sys.exc_info())
                 except:
-                    map.pop(fd, None)
-                    client_logger.critical("Couldn't close a dispatcher.",
-                                           exc_info=sys.exc_info())
+                    pass
 
+                for fd, obj in map.items():
+                    if obj is client_trigger:
+                        continue
+                    try:
+                        obj.mgr.client.close()
+                    except:
+                        map.pop(fd, None)
+                        try:
+                            client_logger.critical("Couldn't close a dispatcher.",
+                                                   exc_info=sys.exc_info())
+                        except:
+                            pass
+
 client_thread = threading.Thread(target=client_loop)
 client_thread.setDaemon(True)
 client_thread.start()



More information about the Checkins mailing list