[PATCH 2/2] Use unique display name for each xi2 test program
Peter Hutterer
peter.hutterer at who-t.net
Sun Sep 21 15:29:32 PDT 2014
On Sun, Sep 21, 2014 at 09:49:06AM -0700, Alan Coopersmith wrote:
> make -j 8 check was sporadically failing in different xi2 tests.
> After adding the asserts in the previous commit to catch xkb failure
> it became easier to catch the failures and see that multiple tests
> were running at once trying to write to /tmp/server-(null).xkm and
> then delete it, and interfering with each other.
>
> Putting a unique string into the display variable let them each write
> to their own file and not interfere with others.
>
> Signed-off-by: Alan Coopersmith <alan.coopersmith at oracle.com>
> ---
>
> I've only tested on Solaris with getprogname(), not on Linux, where
> program_invocation_name would be used instead. If neither is found
> we should either use something like mkstemp() or disable running the
> tests in parallel, but I've not bothered to go that far, since this
> covers enough platforms for me.
Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>
for both
Cheers,
Peter
>
> configure.ac | 4 +++-
> include/dix-config.h.in | 7 +++++++
> test/xi2/protocol-common.c | 11 +++++++++++
> 3 files changed, 21 insertions(+), 1 deletion(-)
>
> diff --git a/configure.ac b/configure.ac
> index be8bff6..04b0b4a 100644
> --- a/configure.ac
> +++ b/configure.ac
> @@ -217,10 +217,12 @@ AC_SUBST(DLOPEN_LIBS)
>
> dnl Checks for library functions.
> AC_CHECK_FUNCS([backtrace ffs geteuid getuid issetugid getresuid \
> - getdtablesize getifaddrs getpeereid getpeerucred getzoneid \
> + getdtablesize getifaddrs getpeereid getpeerucred getprogname getzoneid \
> mmap seteuid shmctl64 strncasecmp vasprintf vsnprintf walkcontext])
> AC_REPLACE_FUNCS([strcasecmp strcasestr strlcat strlcpy strndup])
>
> +AC_CHECK_DECLS([program_invocation_name], [], [], [[#include <errno.h>]])
> +
> dnl Find the math libary, then check for cbrt function in it.
> AC_CHECK_LIB(m, sqrt)
> AC_CHECK_FUNCS([cbrt])
> diff --git a/include/dix-config.h.in b/include/dix-config.h.in
> index 4268b8f..ac68ad6 100644
> --- a/include/dix-config.h.in
> +++ b/include/dix-config.h.in
> @@ -72,6 +72,10 @@
> /* Define to 1 if you have the <dbm.h> header file. */
> #undef HAVE_DBM_H
>
> +/* Define to 1 if you have the declaration of `program_invocation_name', and
> + to 0 if you don't. */
> +#undef HAVE_DECL_PROGRAM_INVOCATION_NAME
> +
> /* Define to 1 if you have the <dirent.h> header file, and it defines `DIR'.
> */
> #undef HAVE_DIRENT_H
> @@ -100,6 +104,9 @@
> /* Define to 1 if you have the `getpeerucred' function. */
> #undef HAVE_GETPEERUCRED
>
> +/* Define to 1 if you have the `getprogname' function. */
> +#undef HAVE_GETPROGNAME
> +
> /* Define to 1 if you have the `getzoneid' function. */
> #undef HAVE_GETZONEID
>
> diff --git a/test/xi2/protocol-common.c b/test/xi2/protocol-common.c
> index 64a5777..3a53050 100644
> --- a/test/xi2/protocol-common.c
> +++ b/test/xi2/protocol-common.c
> @@ -139,6 +139,17 @@ init_devices(void)
> struct devices local_devices;
> int ret;
>
> + /*
> + * Put a unique name in display pointer so that when tests are run in
> + * parallel, their xkbcomp outputs to /tmp/server-<display>.xkm don't
> + * stomp on each other.
> + */
> +#ifdef HAVE_GETPROGNAME
> + display = getprogname();
> +#elif HAVE_DECL_PROGRAM_INVOCATION_NAME
> + display = program_invocation_name;
> +#endif
> +
> client = init_client(0, NULL);
>
> AllocDevicePair(&client, "Virtual core", &local_devices.vcp, &local_devices.vck,
> --
> 1.7.9.2
>
More information about the xorg-devel
mailing list