diff options
author | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2008-06-10 01:39:15 -0700 |
---|---|---|
committer | Jeremy Huddleston <jeremyhu@freedesktop.org> | 2008-06-10 01:39:15 -0700 |
commit | ee92aced10d0743c4658e53b58b5d9f5a094a415 (patch) | |
tree | b80e95019b7cc5c69733d909740c39256ad8f929 | |
parent | d8cf5623faab952a0f1196c8fe10baa09d1fc089 (diff) |
XQuartz: Fixed the "laggy" startup under the new model. This was caused by xinit blocking expecting SIGUSR1 and our stub never sending it.
-rw-r--r-- | hw/xquartz/darwinEvents.c | 4 | ||||
-rw-r--r-- | hw/xquartz/mach-startup/stub.c | 10 |
2 files changed, 14 insertions, 0 deletions
diff --git a/hw/xquartz/darwinEvents.c b/hw/xquartz/darwinEvents.c index 151aaa0a6..911aac7de 100644 --- a/hw/xquartz/darwinEvents.c +++ b/hw/xquartz/darwinEvents.c @@ -350,6 +350,10 @@ Bool DarwinEQInit(void) { QuartzModeEQInit(); + /* Note that this *could* cause a potential async issue, since we're checking + * darwinEvents without holding the lock, but darwinEvents is only ever set + * here, so I don't bother. + */ if (!darwinEvents) { darwinEvents = (xEvent *)xcalloc(sizeof(xEvent), GetMaximumEventsNum()); diff --git a/hw/xquartz/mach-startup/stub.c b/hw/xquartz/mach-startup/stub.c index d48ae7477..7d9875275 100644 --- a/hw/xquartz/mach-startup/stub.c +++ b/hw/xquartz/mach-startup/stub.c @@ -214,6 +214,7 @@ int main(int argc, char **argv, char **envp) { int launchd_fd; string_t handoff_socket_filename; #endif + sig_t handler; if(argc == 2 && !strcmp(argv[1], "-version")) { fprintf(stderr, "X.org Release 7.3\n"); @@ -222,6 +223,15 @@ int main(int argc, char **argv, char **envp) { return EXIT_SUCCESS; } + /* We don't have a mechanism in place to handle this interrupt driven + * server-start notification, so just send the signal now, so xinit doesn't + * time out waiting for it and will just poll for the server. + */ + handler = signal(SIGUSR1, SIG_IGN); + if(handler == SIG_IGN) + kill(getppid(), SIGUSR1); + signal(SIGUSR1, handler); + #ifdef NEW_LAUNCH_METHOD /* Get the $DISPLAY FD */ launchd_fd = launchd_display_fd(); |