xserver: Branch 'master' - 5 commits

Jeremy Huddleston jeremyhu at kemper.freedesktop.org
Sat May 17 14:57:03 PDT 2008


 hw/xquartz/X11Application.m           |   29 ++++++++----
 hw/xquartz/darwinEvents.c             |   40 +++++++++++-----
 hw/xquartz/darwinEvents.h             |    1 
 hw/xquartz/mach-startup/Makefile.am   |    8 ++-
 hw/xquartz/mach-startup/bundle-main.c |    5 +-
 hw/xquartz/mach-startup/launchd_fd.c  |   82 ++++++++++++++++++++++++++++++++++
 hw/xquartz/mach-startup/launchd_fd.h  |   36 ++++++++++++++
 hw/xquartz/mach-startup/stub.c        |    9 ++-
 hw/xquartz/quartzKeyboard.c           |    4 -
 include/os.h                          |    4 +
 os/connection.c                       |   64 ++++++++++++++++++++++++++
 11 files changed, 250 insertions(+), 32 deletions(-)

New commits:
commit 5af5db5033582a84b616d5c50f4288adb0210459
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat May 17 14:51:09 2008 -0700

    XQuartz: Ok, pass XQUARTZ_USE_XKB since it breaks worse without it... but we have issues when we have the keyboard configs installed... need to figure out what to do there...
    (cherry picked from commit 301262b07024ad960f22d99a1267fe137f5c3fce)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index b9d45cb..c75cd1d 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -43,10 +43,7 @@
 // Define this to get a diagnostic output to stderr which is helpful
 // in determining how the X server is interpreting the Darwin keymap.
 #define DUMP_DARWIN_KEYMAP
-
-// This breaks when we actually install xkeyboard-config files to start using it
-// We need to serup keymaps in the configs or something...
-// #define XQUARTZ_USE_XKB 
+#define XQUARTZ_USE_XKB 
 #define HACK_MISSING 1
 #define HACK_KEYPAD 1
 
commit 2408303d79297385063cae557195bd5fd3698478
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Sat May 17 14:56:53 2008 -0700

    XQuartz: Added functionality to add a file descriptor to the connection list after the server is already running.
    (cherry picked from commit 543c2cd68d1ffef65d4644b860faad7191c6b9da)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 50a30fb..1a7d55a 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -38,12 +38,16 @@
 
 #import "X11Application.h"
 
-# include "darwin.h"
-# include "darwinEvents.h"
-# include "quartz.h"
-# define _APPLEWM_SERVER_
-# include "X11/extensions/applewm.h"
-# include "micmap.h"
+#include "darwin.h"
+#include "darwinEvents.h"
+#include "quartz.h"
+#define _APPLEWM_SERVER_
+#include "X11/extensions/applewm.h"
+#include "micmap.h"
+
+#include "os.h"
+#include "mach-startup/launchd_fd.h"
+
 #include <mach/mach.h>
 #include <unistd.h>
 
@@ -783,6 +787,7 @@ environment?", @"Startup xinitrc dialog");
 
 void X11ApplicationMain (int argc, char **argv, char **envp) {
     NSAutoreleasePool *pool;
+    int launchd_fd;
 
 #ifdef DEBUG
     while (access ("/tmp/x11-block", F_OK) == 0) sleep (1);
@@ -810,6 +815,14 @@ void X11ApplicationMain (int argc, char **argv, char **envp) {
 
     /* Tell the server thread that it can proceed */
     QuartzInitServer(argc, argv, envp);
+    
+#ifndef NEW_LAUNCH_METHOD
+    /* Start listening on the launchd fd */
+    launchd_fd = launchd_display_fd();
+    if(launchd_fd != -1) {
+        DarwinSendDDXEvent(kXquartzListenOnOpenFD, 1, launchd_fd);
+    }
+#endif
 
     [NSApp run];
     /* not reached */
diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index 7376c57..06c5df0 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -45,6 +45,7 @@ in this Software without prior written authorization from The Open Group.
 #include   "mi.h"
 #include   "scrnintstr.h"
 #include   "mipointer.h"
+#include   "os.h"
 
 #include "darwin.h"
 #include "quartz.h"
@@ -214,6 +215,16 @@ static void DarwinSimulateMouseClick(
     DarwinUpdateModifiers(KeyPress, modifierMask);
 }
 
+static void kXquartzListenOnOpenFDHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, int nevents) {
+    size_t i;
+    TA_SERVER();
+
+    for (i=0; i<nevents; i++) {
+        //sleep(20);
+        ListenOnOpenFD(xe[i].u.clientMessage.u.l.longs0);
+    }
+}
+
 /* Generic handler for Xquartz-specifc events.  When possible, these should
    be moved into their own individual functions and set as handlers using
    mieqSetHandler. */
@@ -319,7 +330,8 @@ Bool DarwinEQInit(void) {
     mieqSetHandler(kXquartzControllerNotify, DarwinEventHandler);
     mieqSetHandler(kXquartzPasteboardNotify, DarwinEventHandler);
     mieqSetHandler(kXquartzDisplayChanged, QuartzDisplayChangedHandler);
-
+    mieqSetHandler(kXquartzListenOnOpenFD, kXquartzListenOnOpenFDHandler);
+    
     QuartzModeEQInit();
 
     if (!darwinEvents)
diff --git a/hw/xquartz/darwinEvents.h b/hw/xquartz/darwinEvents.h
index a676aeb..58817fb 100644
--- a/hw/xquartz/darwinEvents.h
+++ b/hw/xquartz/darwinEvents.h
@@ -56,6 +56,7 @@ enum {
     kXquartzToggleFullscreen, // Enable/Disable fullscreen mode
     kXquartzSetRootless,      // Set rootless mode
     kXquartzSpaceChanged,     // Spaces changed
+    kXquartzListenOnOpenFD,   // Listen to the launchd fd (passed as arg)
     /*
      * AppleWM events
      */
diff --git a/hw/xquartz/mach-startup/Makefile.am b/hw/xquartz/mach-startup/Makefile.am
index d81caa9..3ed1c1a 100644
--- a/hw/xquartz/mach-startup/Makefile.am
+++ b/hw/xquartz/mach-startup/Makefile.am
@@ -7,7 +7,8 @@ x11appdir = $(APPLE_APPLICATIONS_DIR)/X11.app/Contents/MacOS
 x11app_PROGRAMS = X11
 
 dist_X11_SOURCES = \
-	bundle-main.c
+	bundle-main.c \
+	launchd_fd.c
 
 nodist_X11_SOURCES = \
 	mach_startupServer.c \
@@ -33,7 +34,8 @@ X11_LDFLAGS =  \
 bin_PROGRAMS = Xquartz
 
 dist_Xquartz_SOURCES = \
-	stub.c
+	stub.c \
+	launchd_fd.c
 
 nodist_Xquartz_SOURCES = \
 	mach_startupUser.c
@@ -54,6 +56,7 @@ $(BUILT_SOURCES): mach_startup.defs
 	mig -sheader mach_startupServer.h mach_startup.defs
 
 EXTRA_DIST = \
+	launchd_fd.h \
 	mach_startup.defs \
 	mach_startup_types.h
 
diff --git a/hw/xquartz/mach-startup/launchd_fd.c b/hw/xquartz/mach-startup/launchd_fd.c
new file mode 100644
index 0000000..44a243a
--- /dev/null
+++ b/hw/xquartz/mach-startup/launchd_fd.c
@@ -0,0 +1,82 @@
+/* Copyright (c) 2008 Apple Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT
+ * HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name(s) of the above
+ * copyright holders shall not be used in advertising or otherwise to
+ * promote the sale, use or other dealings in this Software without
+ * prior written authorization.
+ */
+
+#include <launch.h>
+#include <stdio.h>
+#include <errno.h>
+
+#include "launchd_fd.h"
+
+int launchd_display_fd() {
+    launch_data_t sockets_dict, checkin_request, checkin_response;
+    launch_data_t listening_fd_array, listening_fd;
+
+    /* Get launchd fd */
+    if ((checkin_request = launch_data_new_string(LAUNCH_KEY_CHECKIN)) == NULL) {
+        fprintf(stderr,"launch_data_new_string(\"" LAUNCH_KEY_CHECKIN "\") Unable to create string.\n");
+        return ERROR_FD;
+    }
+    
+    if ((checkin_response = launch_msg(checkin_request)) == NULL) {
+        fprintf(stderr,"launch_msg(\"" LAUNCH_KEY_CHECKIN "\") IPC failure: %s\n",strerror(errno));
+        return ERROR_FD;
+    }
+    
+    if (LAUNCH_DATA_ERRNO == launch_data_get_type(checkin_response)) {
+        // ignore EACCES, which is common if we weren't started by launchd
+        if (launch_data_get_errno(checkin_response) != EACCES)
+            fprintf(stderr,"launchd check-in failed: %s\n", strerror(launch_data_get_errno(checkin_response)));
+        return ERROR_FD;
+    } 
+    
+    sockets_dict = launch_data_dict_lookup(checkin_response, LAUNCH_JOBKEY_SOCKETS);
+    if (NULL == sockets_dict) {
+        fprintf(stderr,"launchd check-in: no sockets found to answer requests on!\n");
+        return ERROR_FD;
+    }
+    
+    if (launch_data_dict_get_count(sockets_dict) > 1) {
+        fprintf(stderr,"launchd check-in: some sockets will be ignored!\n");
+        return ERROR_FD;
+    }
+    
+    listening_fd_array = launch_data_dict_lookup(sockets_dict, ":0");
+    if (NULL == listening_fd_array) {
+        fprintf(stderr,"launchd check-in: No known sockets found to answer requests on!\n");
+        return ERROR_FD;
+    }
+    
+    if (launch_data_array_get_count(listening_fd_array)!=1) {
+        fprintf(stderr,"launchd check-in: Expected 1 socket from launchd, got %u)\n",
+                (unsigned)launch_data_array_get_count(listening_fd_array));
+        return ERROR_FD;
+    }
+    
+    listening_fd=launch_data_array_get_index(listening_fd_array, 0);
+    return launch_data_get_fd(listening_fd);
+}
diff --git a/hw/xquartz/mach-startup/launchd_fd.h b/hw/xquartz/mach-startup/launchd_fd.h
new file mode 100644
index 0000000..5083fae
--- /dev/null
+++ b/hw/xquartz/mach-startup/launchd_fd.h
@@ -0,0 +1,36 @@
+/* Copyright (c) 2008 Apple Inc.
+ *
+ * Permission is hereby granted, free of charge, to any person
+ * obtaining a copy of this software and associated documentation files
+ * (the "Software"), to deal in the Software without restriction,
+ * including without limitation the rights to use, copy, modify, merge,
+ * publish, distribute, sublicense, and/or sell copies of the Software,
+ * and to permit persons to whom the Software is furnished to do so,
+ * subject to the following conditions:
+ *
+ * The above copyright notice and this permission notice shall be
+ * included in all copies or substantial portions of the Software.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
+ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+ * NONINFRINGEMENT.  IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT
+ * HOLDER(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+ * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
+ * DEALINGS IN THE SOFTWARE.
+ *
+ * Except as contained in this notice, the name(s) of the above
+ * copyright holders shall not be used in advertising or otherwise to
+ * promote the sale, use or other dealings in this Software without
+ * prior written authorization.
+ */
+
+#ifndef _XQUARTZ_LAUNCHD_FD_H_
+#define _XQUARTZ_LAUNCHD_FD_H_
+
+#define ERROR_FD -1
+
+int launchd_display_fd(void);
+
+#endif /* _XQUARTZ_LAUNCHD_FD_H_ */
\ No newline at end of file
diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index cc0c889..b9d45cb 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -904,7 +904,6 @@ void DarwinKeyboardInit(DeviceIntPtr pDev) {
 	
 	QuartzXkbUpdate(pDev);
 #else
-#error FAIL
     assert( InitKeyboardDeviceStruct( (DevicePtr)pDev, &keySyms,
                                       keyInfo.modMap, QuartzBell,
                                       DarwinChangeKeyboardControl ));
@@ -921,7 +920,6 @@ void DarwinKeyboardReloadHandler(int screenNum, xEventPtr xe, DeviceIntPtr pDev,
 #ifdef XQUARTZ_USE_XKB
 	QuartzXkbUpdate(pDev);
 #else
-#error FAIL
 	if (pDev->key) {
 		if (pDev->key->curKeySyms.map) xfree(pDev->key->curKeySyms.map);
 		if (pDev->key->modifierKeyMap) xfree(pDev->key->modifierKeyMap);
diff --git a/include/os.h b/include/os.h
index c0f04c6..fd34077 100644
--- a/include/os.h
+++ b/include/os.h
@@ -166,6 +166,10 @@ extern void MakeClientGrabImpervious(ClientPtr /*client*/);
 
 extern void MakeClientGrabPervious(ClientPtr /*client*/);
 
+#ifdef XQUARTZ
+extern void ListenOnOpenFD(int /* fd */);
+#endif
+
 extern void AvailableClientInput(ClientPtr /* client */);
 
 extern CARD32 GetTimeInMillis(void);
diff --git a/os/connection.c b/os/connection.c
index 3965936..a877257 100644
--- a/os/connection.c
+++ b/os/connection.c
@@ -1297,3 +1297,67 @@ MakeClientGrabPervious(ClientPtr client)
     }
 }
 
+#ifdef XQUARTZ
+/* Add a fd (from launchd) to our listeners */
+_X_EXPORT void ListenOnOpenFD(int fd) {
+    char port[20];
+    XtransConnInfo ciptr, *ciptr2, *ciptr3;
+    int *iptr, *iptr2;
+    
+    /* Sigh for inconsistencies. */  
+    sprintf (port, ":%d", atoi(display));
+
+    /* Make our XtransConnInfo
+     * TRANS_SOCKET_LOCAL_INDEX = 5 from Xtrans.c
+     */
+    ciptr = _XSERVTransReopenCOTSServer(5, fd, port);
+    if(ciptr == NULL) {
+        fprintf(stderr, "Got NULL while trying to Reopen launchd port.\n");
+        return;
+    }
+    
+    /* Allocate space to store it */
+    iptr = (int *) realloc(ListenTransFds, (ListenTransCount + 1) * sizeof (int));
+    
+    if(!iptr) {
+        fprintf(stderr, "Memory allocation error");
+        return;
+    }
+    
+    ciptr2 = (XtransConnInfo *) realloc(ListenTransConns, (ListenTransCount + 1) * sizeof (XtransConnInfo));
+    if(!ciptr2) {
+        fprintf(stderr, "Memory allocation error");
+        if(iptr != ListenTransFds)
+            free(ListenTransFds);
+        return;
+    }
+
+    if(iptr != ListenTransFds) {
+        iptr2 = ListenTransFds;
+        ListenTransFds = iptr;
+        free(iptr2);
+    }
+    
+    if(ciptr2 != ListenTransConns) {
+        ciptr3 = ListenTransConns;
+        ListenTransConns = ciptr2;
+        free(ciptr3);
+    }
+    
+    /* Store it */
+    ListenTransConns[ListenTransCount] = ciptr;
+    ListenTransFds[ListenTransCount] = fd;
+
+    FD_SET(fd, &WellKnownConnections);
+    
+    /* It is always local
+    if (!_XSERVTransIsLocal(ciptr)) {
+    //    DefineSelf (fd);
+    }
+    */
+    
+    /* Increment the count */
+    ListenTransCount++;
+}
+
+#endif
commit 01612fe612aa27262fc3c8167f52e0376941f1ef
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu May 15 07:08:21 2008 -0700

    XQuartz: Disable xkb since it doesn't work after getting xkeyboard-config installed
    
    Need to setup configs for the quartz keyboard
    (cherry picked from commit c28fecc621b1803a4d4536afbc724d141de9e6ee)

diff --git a/hw/xquartz/quartzKeyboard.c b/hw/xquartz/quartzKeyboard.c
index 698f39a..cc0c889 100644
--- a/hw/xquartz/quartzKeyboard.c
+++ b/hw/xquartz/quartzKeyboard.c
@@ -43,7 +43,10 @@
 // Define this to get a diagnostic output to stderr which is helpful
 // in determining how the X server is interpreting the Darwin keymap.
 #define DUMP_DARWIN_KEYMAP
-#define XQUARTZ_USE_XKB
+
+// This breaks when we actually install xkeyboard-config files to start using it
+// We need to serup keymaps in the configs or something...
+// #define XQUARTZ_USE_XKB 
 #define HACK_MISSING 1
 #define HACK_KEYPAD 1
 
commit 1d09deaa6e5a75420ea4f24f6b5533f0ebc3ba28
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Thu May 15 05:49:43 2008 -0700

    XQuartz: Made DarwinSendDDXEvent a little more robust to context switching diring server init.
    (cherry picked from commit 5626b0949b1a6bdd2fa3ec2ef53a688084349b87)

diff --git a/hw/xquartz/X11Application.m b/hw/xquartz/X11Application.m
index 9367c9f..50a30fb 100644
--- a/hw/xquartz/X11Application.m
+++ b/hw/xquartz/X11Application.m
@@ -59,11 +59,9 @@
 int X11EnableKeyEquivalents = TRUE;
 int quartzHasRoot = FALSE, quartzEnableRootless = TRUE;
 
-extern int darwinFakeButtons, input_check_flag;
+extern int darwinFakeButtons;
 extern Bool enable_stereo;
 
-extern xEvent *darwinEvents;
-
 X11Application *X11App;
 
 #define ALL_KEY_MASKS (NSShiftKeyMask | NSControlKeyMask | NSAlternateKeyMask | NSCommandKeyMask)
diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c
index 1547094..7376c57 100644
--- a/hw/xquartz/darwinEvents.c
+++ b/hw/xquartz/darwinEvents.c
@@ -76,12 +76,10 @@ in this Software without prior written authorization from The Open Group.
 /* FIXME: Abstract this better */
 void QuartzModeEQInit(void);
 
-int input_check_zero, input_check_flag;
-
 static int old_flags = 0;  // last known modifier state
 
-xEvent *darwinEvents = NULL;
-pthread_mutex_t darwinEvents_mutex = PTHREAD_MUTEX_INITIALIZER;
+static xEvent *darwinEvents = NULL;
+static pthread_mutex_t darwinEvents_mutex = PTHREAD_MUTEX_INITIALIZER;
 
 static inline void darwinEvents_lock(void) {
     int err;
@@ -307,11 +305,6 @@ static void DarwinEventHandler(int screenNum, xEventPtr xe, DeviceIntPtr dev, in
 }
 
 Bool DarwinEQInit(void) { 
-    if (!darwinEvents)
-        darwinEvents = (xEvent *)xcalloc(sizeof(xEvent), GetMaximumEventsNum());
-    if (!darwinEvents)
-        FatalError("Couldn't allocate event buffer\n");
-
     mieqInit();
     mieqSetHandler(kXquartzReloadKeymap, DarwinKeyboardReloadHandler);
     mieqSetHandler(kXquartzActivate, DarwinEventHandler);
@@ -328,6 +321,11 @@ Bool DarwinEQInit(void) {
     mieqSetHandler(kXquartzDisplayChanged, QuartzDisplayChangedHandler);
 
     QuartzModeEQInit();
+
+    if (!darwinEvents)
+        darwinEvents = (xEvent *)xcalloc(sizeof(xEvent), GetMaximumEventsNum());
+    if (!darwinEvents)
+        FatalError("Couldn't allocate event buffer\n");
     
     return TRUE;
 }
@@ -354,7 +352,6 @@ void ProcessInputEvents(void) {
    Dispatch() event loop to check out event queue */
 static void DarwinPokeEQ(void) {
 	char nullbyte=0;
-	input_check_flag++;
 	//  <daniels> oh, i ... er ... christ.
 	write(darwinEventWriteFD, &nullbyte, 1);
 }
@@ -567,8 +564,13 @@ void DarwinSendDDXEvent(int type, int argc, ...) {
         va_end (args);
     }
 
-    darwinEvents_lock();
+    /* If we're called from something other than the X server thread, we need
+     * to wait for the X server to setup darwinEvents.
+     */
+    while(darwinEvents == NULL) {
+        usleep(250000);
+    }
+
     mieqEnqueue(darwinPointer, &xe);
     DarwinPokeEQ();
-    darwinEvents_unlock();
 }
commit adc62f62b9f08aa6633718989ab61b61e3c1e8e2
Author: Jeremy Huddleston <jeremyhu at freedesktop.org>
Date:   Wed May 14 01:33:43 2008 -0700

    Xquartz: Xquartz stub now can send Mach IPC to start the server.
    (cherry picked from commit 55a3bca8ea42f8677897f94bf0a429bdc08c6696)

diff --git a/hw/xquartz/mach-startup/Makefile.am b/hw/xquartz/mach-startup/Makefile.am
index ee2cbfe..d81caa9 100644
--- a/hw/xquartz/mach-startup/Makefile.am
+++ b/hw/xquartz/mach-startup/Makefile.am
@@ -1,6 +1,7 @@
 AM_CPPFLAGS = \
 	-DBUILD_DATE=\"$(BUILD_DATE)\" \
 	-DXSERVER_VERSION=\"$(VERSION)\"
+#	-DNEW_LAUNCH_METHOD -DNEW_LAUNCH_METHOD_2
 
 x11appdir = $(APPLE_APPLICATIONS_DIR)/X11.app/Contents/MacOS
 x11app_PROGRAMS = X11
diff --git a/hw/xquartz/mach-startup/bundle-main.c b/hw/xquartz/mach-startup/bundle-main.c
index cd64e42..dd75f02 100644
--- a/hw/xquartz/mach-startup/bundle-main.c
+++ b/hw/xquartz/mach-startup/bundle-main.c
@@ -165,10 +165,11 @@ int main(int argc, char **argv, char **envp) {
     mach_port_t mp;
     kern_return_t kr;
 
+    fprintf(stderr, "X11.app: main(): argc=%d\n", argc);
     for(i=1; i < argc; i++) {
+        fprintf(stderr, "\targv[%u] = %s\n", (unsigned)i, argv[i]);
         if(!strcmp(argv[i], "--listenonly")) {
             listenOnly = TRUE;
-            break;
         }
     }
 
@@ -221,10 +222,12 @@ int main(int argc, char **argv, char **envp) {
     const char *s;
     
     size_t i;
+#ifndef NEW_LAUNCH_METHOD
     fprintf(stderr, "X11.app: main(): argc=%d\n", argc);
     for(i=0; i < argc; i++) {
         fprintf(stderr, "\targv[%u] = %s\n", (unsigned)i, argv[i]);
     }
+#endif
     
     /* Take care of the case where we're called like a normal DDX */
     if(argc > 1 && argv[1][0] == ':') {
diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c
index fae9720..c53ed53 100644
--- a/hw/xquartz/mach-startup/stub.c
+++ b/hw/xquartz/mach-startup/stub.c
@@ -115,6 +115,7 @@ int main(int argc, char **argv, char **envp) {
     mach_port_t mp;
     string_array_t newenvp;
     string_array_t newargv;
+    size_t i;
 #endif
 
     if(argc == 2 && !strcmp(argv[1], "-version")) {
@@ -127,7 +128,6 @@ int main(int argc, char **argv, char **envp) {
 #ifdef NEW_LAUNCH_METHOD_2
     kr = bootstrap_look_up(bootstrap_port, SERVER_BOOTSTRAP_NAME, &mp);
     if(kr != KERN_SUCCESS) {
-        int i;
         set_x11_path();
 
         /* This forking is ugly and will be cleaned up later */
@@ -142,19 +142,20 @@ int main(int argc, char **argv, char **envp) {
             _argv[0] = x11_path;
             _argv[1] = "--listenonly";
             _argv[2] = NULL;
+            fprintf(stderr, "Starting X server: %s --listenonly\n", x11_path);
             return execvp(x11_path, _argv);
         }
 
         /* Try connecting for 10 seconds */
-        for(i=0; i < 20; i++) {
-            usleep(500);
+        for(i=0; i < 40; i++) {
+            usleep(250000);
             kr = bootstrap_look_up(bootstrap_port, SERVER_BOOTSTRAP_NAME, &mp);
             if(kr == KERN_SUCCESS)
                 break;
         }
 
         if(kr != KERN_SUCCESS) {
-            fprintf(stderr, "bootstrap_look_up(): %s\n", bootstrap_strerror(kr));
+            fprintf(stderr, "bootstrap_look_up(): Timed out: %s\n", bootstrap_strerror(kr));
             return EXIT_FAILURE;
         }
     }


More information about the xorg-commit mailing list