[Zope-Checkins] SVN: Zope/branches/Zope-2_8-branch/ Merged r40547 from 2.9 branch:

Florent Guillaume fg at nuxeo.com
Tue Dec 6 05:14:16 EST 2005


Log message for revision 40583:
  Merged r40547 from 2.9 branch:
  Collector #1904: On Mac OS X avoid a spurious OSError when zopectl exits.
  

Changed:
  U   Zope/branches/Zope-2_8-branch/doc/CHANGES.txt
  U   Zope/branches/Zope-2_8-branch/lib/python/Zope2/Startup/zopectl.py

-=-
Modified: Zope/branches/Zope-2_8-branch/doc/CHANGES.txt
===================================================================
--- Zope/branches/Zope-2_8-branch/doc/CHANGES.txt	2005-12-06 10:03:25 UTC (rev 40582)
+++ Zope/branches/Zope-2_8-branch/doc/CHANGES.txt	2005-12-06 10:14:16 UTC (rev 40583)
@@ -26,6 +26,9 @@
 
     Bugs Fixed
 
+      - Collector #1904: On Mac OS X avoid a spurious OSError when
+        zopectl exits.
+
       - CopySupport: Reverted workaround in '_verifyObjectPaste'.
         'checkPermission' now respects proxy roles, so the warkaround
         introduced to fix http://www.zope.org/Collectors/Zope/78 is no longer

Modified: Zope/branches/Zope-2_8-branch/lib/python/Zope2/Startup/zopectl.py
===================================================================
--- Zope/branches/Zope-2_8-branch/lib/python/Zope2/Startup/zopectl.py	2005-12-06 10:03:25 UTC (rev 40582)
+++ Zope/branches/Zope-2_8-branch/lib/python/Zope2/Startup/zopectl.py	2005-12-06 10:14:16 UTC (rev 40583)
@@ -310,5 +310,13 @@
     #   If it is not reset, 'os.wait[pid]' can non-deterministically fail.
     #   Thus, use a way such that "SIGCHLD" is definitely reset in children.
     #signal.signal(signal.SIGCHLD, signal.SIG_IGN)
-    signal.signal(signal.SIGCHLD, _ignoreSIGCHLD)
+    if os.uname()[0] != 'Darwin':
+        # On Mac OS X, setting up a signal handler causes waitpid to
+        # raise EINTR, which is not preventable via the Python signal
+        # handler API and can't be dealt with properly as we can't pass
+        # the SA_RESTART to the signal API. Since Mac OS X doesn't
+        # appear to clutter up the process table with zombies if
+        # SIGCHILD is unset, just don't bother registering a SIGCHILD
+        # signal handler at all.
+        signal.signal(signal.SIGCHLD, _ignoreSIGCHLD)
     main()



More information about the Zope-Checkins mailing list