On Wed, Mar 19, 2014 at 7:26 AM, Jon TURNEY <jon.tur...@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.tur...@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@lists.x.org: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel _______________________________________________ xorg-devel@lists.x.org: X.Org development Archives: http://lists.x.org/archives/xorg-devel Info: http://lists.x.org/mailman/listinfo/xorg-devel