From: Kristian Høgsberg <[email protected]> Useful for fd passing, including under XWayland where we receive our listening socket from the compositor.
Signed-off-by: Kristian Høgsberg <[email protected]> --- include/opaque.h | 1 + os/connection.c | 7 ++++++- os/utils.c | 6 +++++- 3 files changed, 12 insertions(+), 2 deletions(-) diff --git a/include/opaque.h b/include/opaque.h index b76ab6e..8ad9af0 100644 --- a/include/opaque.h +++ b/include/opaque.h @@ -74,5 +74,6 @@ extern _X_EXPORT Bool whiteRoot; extern _X_EXPORT Bool bgNoneRoot; extern _X_EXPORT Bool CoreDump; +extern _X_EXPORT Bool NoListenAll; #endif /* OPAQUE_H */ diff --git a/os/connection.c b/os/connection.c index 6cd8bcf..91e3b13 100644 --- a/os/connection.c +++ b/os/connection.c @@ -138,6 +138,7 @@ fd_set OutputPending; /* clients with reply/event data ready to go */ int MaxClients = 0; Bool NewOutputPending; /* not yet attempted to write some new output */ Bool AnyClientsWriteBlocked; /* true if some client blocked on write */ +Bool NoListenAll; /* Don't establish any listening sockets */ static Bool RunFromSmartParent; /* send SIGUSR1 to parent process */ Bool RunFromSigStopParent; /* send SIGSTOP to our own process; Upstart (or @@ -371,6 +372,9 @@ TryCreateSocket(int num, int *partial) { char port[20]; + if (NoListenAll) + return TRUE; + snprintf(port, sizeof(port), "%d", num); return (_XSERVTransMakeAllCOTSServerListeners(port, partial, @@ -440,9 +444,10 @@ CreateWellKnownSockets(void) DefineSelf (fd); } - if (!XFD_ANYSET(&WellKnownConnections)) + if (!XFD_ANYSET(&WellKnownConnections) && !NoListenAll) FatalError ("Cannot establish any listening sockets - Make sure an X server isn't already running"); + #if !defined(WIN32) OsSignal(SIGPIPE, SIG_IGN); OsSignal(SIGHUP, AutoResetServer); diff --git a/os/utils.c b/os/utils.c index 3c520ad..1c34cd3 100644 --- a/os/utils.c +++ b/os/utils.c @@ -775,7 +775,11 @@ ProcessCommandLine(int argc, char *argv[]) #endif else if (strcmp(argv[i], "-nolisten") == 0) { if (++i < argc) { - if (_XSERVTransNoListen(argv[i])) + if (strcmp(argv[i], "all") == 0) { + NoListenAll = TRUE; + nolock = TRUE; + } + else if (_XSERVTransNoListen(argv[i])) ErrorF("Failed to disable listen for %s transport", argv[i]); } -- 1.7.10.4 _______________________________________________ [email protected]: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel
