[PATCH] Handle -displayfd and an explicit display number sensibly
Kristian Høgsberg
krh at bitplanet.net
Mon Mar 24 12:56:06 PDT 2014
On Wed, Mar 19, 2014 at 7:26 AM, Jon TURNEY <jon.turney at dronecode.org.uk> wrote:
> Handle -displayfd and an explicit display number sensibly, e.g. use the
> explicitly specified display number, and write it to the displayfd
I don't think the two options were meant to be used together, but I
can see how that would be useful. Non-signal based ready notification
while letting the parent process pick the display is useful for
Xwayland as well.
> Signed-off-by: Jon TURNEY <jon.turney at dronecode.org.uk>
> ---
> dix/globals.c | 3 ++-
> include/opaque.h | 1 +
> os/connection.c | 11 +++++------
> os/utils.c | 2 +-
> 4 files changed, 9 insertions(+), 8 deletions(-)
>
> diff --git a/dix/globals.c b/dix/globals.c
> index 9738e9c..5a21f07 100644
> --- a/dix/globals.c
> +++ b/dix/globals.c
> @@ -127,7 +127,8 @@ int defaultColorVisualClass = -1;
> int monitorResolution = 0;
>
> const char *display;
> -int displayfd;
> +int displayfd = 0;
The parent process creates the fd in our process environment and could
pick 0 as the display fd. Let's initialize to -1 which is never a
valid fd.
> +Bool explicit_display = FALSE;
> char *ConnectionInfo;
>
> CARD32 TimeOutValue = DEFAULT_TIMEOUT * MILLI_PER_SECOND;
> diff --git a/include/opaque.h b/include/opaque.h
> index 73d40c3..0d917b0 100644
> --- a/include/opaque.h
> +++ b/include/opaque.h
> @@ -51,6 +51,7 @@ extern _X_EXPORT int defaultScreenSaverBlanking;
> extern _X_EXPORT int defaultScreenSaverAllowExposures;
> extern _X_EXPORT const char *display;
> extern _X_EXPORT int displayfd;
> +extern _X_EXPORT Bool explicit_display;
>
> extern _X_EXPORT int defaultBackingStore;
> extern _X_EXPORT Bool disableBackingStore;
> diff --git a/os/connection.c b/os/connection.c
> index ddf4f0a..23a4f6a 100644
> --- a/os/connection.c
> +++ b/os/connection.c
> @@ -351,8 +351,8 @@ void
> NotifyParentProcess(void)
> {
> #if !defined(WIN32)
> - if (dynamic_display[0]) {
> - write(displayfd, dynamic_display, strlen(dynamic_display));
> + if (displayfd) {
> + write(displayfd, display, strlen(display));
> write(displayfd, "\n", 1);
> close(displayfd);
> }
> @@ -404,15 +404,14 @@ CreateWellKnownSockets(void)
> FD_ZERO(&WellKnownConnections);
>
> /* display is initialized to "0" by main(). It is then set to the display
> - * number if specified on the command line, or to NULL when the -displayfd
> - * option is used. */
> - if (display) {
> + * number if specified on the command line. */
> + if ((displayfd == 0) || explicit_display) {
> if (TryCreateSocket(atoi(display), &partial) &&
> ListenTransCount >= 1)
> if (!PartialNetwork && partial)
> FatalError ("Failed to establish all listening sockets");
> }
> - else { /* -displayfd */
> + else { /* -displayfd and no explicit display number */
> Bool found = 0;
> for (i = 0; i < 65535 - X_TCP_PORT; i++) {
> if (TryCreateSocket(i, &partial) && !partial) {
> diff --git a/os/utils.c b/os/utils.c
> index 497779b..8ea6e7a 100644
> --- a/os/utils.c
> +++ b/os/utils.c
> @@ -666,6 +666,7 @@ ProcessCommandLine(int argc, char *argv[])
> else if (argv[i][0] == ':') {
> /* initialize display */
> display = argv[i];
> + explicit_display = TRUE;
> display++;
> if (!VerifyDisplayName(display)) {
> ErrorF("Bad display name: %s\n", display);
> @@ -736,7 +737,6 @@ ProcessCommandLine(int argc, char *argv[])
> else if (strcmp(argv[i], "-displayfd") == 0) {
> if (++i < argc) {
> displayfd = atoi(argv[i]);
> - display = NULL;
> #ifdef LOCK_SERVER
> nolock = TRUE;
> #endif
> --
> 1.8.3.4
>
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
More information about the xorg-devel
mailing list