summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeremy Huddleston <jeremyhu@freedesktop.org>2008-06-10 01:39:15 -0700
committerJeremy Huddleston <jeremyhu@freedesktop.org>2008-06-10 01:46:01 -0700
commit5170c169db78cad3fe47dee4e438b48e67f0c7d1 (patch)
treecd9a1b9d8945193ed54a0af0d186e61c9a53301d
parent01ace5f3fd56bc789ad7448059fcf907ef19a1c8 (diff)
XQuartz: Fixed the "laggy" startup under the new model. This was caused by xinit blocking expecting SIGUSR1 and our stub never sending it.
(cherry picked from commit ee92aced10d0743c4658e53b58b5d9f5a094a415)
-rw-r--r--hw/xquartz/darwinEvents.c4
-rw-r--r--hw/xquartz/mach-startup/stub.c10
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();