xserver: Branch 'xorg-server-1.4-apple' - 2 commits

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Sat Jun 27 18:26:46 PDT 2009


 hw/xquartz/applewm.c                  |    2 -
 hw/xquartz/mach-startup/bundle-main.c |   40 ++++++++++++++++++++++++++++++++--
 2 files changed, 39 insertions(+), 3 deletions(-)

New commits:
commit b0fd66bc58fe7d24914e8588ad3326de5d66b4da
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jun 27 15:28:34 2009 -0700

    XQuartz: Don't leave zombied processes at startup
    (cherry picked from commit 40c1406830588fa85d880e9f4e9ca570db1db306)

diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index fd70f26..ef5d757 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -44,6 +44,7 @@
 #include <sys/un.h>
 
 #include <sys/time.h>
+#include <fcntl.h>
 
 #include <mach/mach.h>
 #include <mach/mach_error.h>
@@ -514,8 +515,43 @@ int main(int argc, char **argv, char **envp) {
      * thread handle it.
      */
     if(!listenOnly) {
-        if(fork() == 0) {
-            return startup_trigger(argc, argv, envp);
+        pid_t child1, child2;
+        int status;
+
+        /* Do the fork-twice trick to avoid having to reap zombies */
+        child1 = fork();
+        switch (child1) {
+            case -1:                                /* error */
+                break;
+
+            case 0:                                 /* child1 */
+                child2 = fork();
+
+                switch (child2) {
+                    int max_files, i;
+
+                    case -1:                            /* error */
+                        break;
+
+                    case 0:                             /* child2 */
+                        /* close all open files except for standard streams */
+                        max_files = sysconf(_SC_OPEN_MAX);
+                        for(i = 3; i < max_files; i++)
+                            close(i);
+
+                        /* ensure stdin is on /dev/null */
+                        close(0);
+                        open("/dev/null", O_RDONLY);
+
+                        return startup_trigger(argc, argv, envp);
+
+                    default:                            /* parent (child1) */
+                        _exit(0);
+                }
+                break;
+
+            default:                                /* parent */
+              waitpid(child1, &status, 0);
         }
     }
     
commit bf6f3d007d6cba9e0d2400fd2436f59c54440c1c
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat Jun 27 14:40:03 2009 -0700

    XQuartz: 64bit fix for screen origin in AppleWM
    (cherry picked from commit 60a757d2802a5c34acd91ca9a052937b5a169ede)

diff --git a/hw/xquartz/applewm.c b/hw/xquartz/applewm.c
index 70cd47c..cbb1f15 100644
--- a/hw/xquartz/applewm.c
+++ b/hw/xquartz/applewm.c
@@ -149,7 +149,7 @@ AppleWMSetScreenOrigin(
     WindowPtr pWin
 )
 {
-    long data[2];
+    int32_t data[2];
 
     data[0] = (dixScreenOrigins[pWin->drawable.pScreen->myNum].x
                 + darwinMainScreenX);


More information about the xorg-commit mailing list