On 09/12/2018 10:28 AM, Nicolai Hähnle wrote:
On 12.09.2018 14:31, Kazlauskas, Nicholas wrote:
On 09/12/2018 12:26 AM, Timothy Arceri wrote:
On 12/9/18 2:24 am, Nicholas Kazlauskas wrote:
Some programs start with the path and command line arguments in
argv[0] (program_invocation_name). Chromium is an example of
an application using mesa that does this.

This change breaks the detection of Wine applications. Can you give an example of the string in program_invocation_name for Chromium? Can we not remove the arguments from the string?

The issue shows up with the subprocesses spawned by Chromium or Chome where program_invocation_name shows up as something like this:

/usr/lib/chromium/chromium --type=gpu-process --field-trial-handle=...

The fix to this patch to avoid breaking Wine programs is probably just deferring the realpath logic until the inner part of of the '/' path detection.

I think this is the simplest method of dropping the arguments while still retaining the exact program name match with strcmp.

Could we instead extend the syntax of the process filter? For example, understand a '*' wildcard at the end of the program name in the drirc XML do a prefix match instead of a full string match in that case.

Cheers,
Nicolai

That's an option I considered as well. Though on Linux it's possible to have '*' as part of an actual program name so it could get confusing.

For now I think the realpath methods works - I tested a version of this patch with the realpath check only after it picks up on a '/' in the path and it seems to be working fine for both Wine programs and Linux ones as well (which would make sense since '/' is forbidden as part of Windows paths).

It's debatable whether a solution that checks if the realpath program is the wine launcher is more robust or not. I'd imagine not.

Nicholas Kazlauskas






This tries to query the real path for the symbolic link /proc/self/exe
to find the program name instead.

Signed-off-by: Nicholas Kazlauskas <nicholas.kazlaus...@amd.com>
---
  src/util/u_process.c | 17 ++++++++++++++---
  1 file changed, 14 insertions(+), 3 deletions(-)

diff --git a/src/util/u_process.c b/src/util/u_process.c
index 5e5927678d..ca4d0770cb 100644
--- a/src/util/u_process.c
+++ b/src/util/u_process.c
@@ -29,6 +29,7 @@
  #include <string.h>
  #include <errno.h>
  #include <stdlib.h>
+#include <stdio.h>
  #undef GET_PROGRAM_NAME
@@ -36,22 +37,32 @@
  #    if !defined(__GLIBC__) || (__GLIBC__ < 2)
  /* These aren't declared in any libc5 header */
  extern char *program_invocation_name, *program_invocation_short_name;
+extern char *__progname;
  #    endif
  static const char *
  __getProgramName()
  {
-   char * arg = strrchr(program_invocation_name, '/');
+   static char * actual_path;
+   char * path = NULL;
+   char * arg = NULL;
+
+   if (!actual_path)
+      actual_path = realpath("/proc/self/exe", NULL);
+
+   path = actual_path ? actual_path : program_invocation_name;
+
+   arg = strrchr(path, '/');
     if (arg)
        return arg+1;
     /* If there was no '/' at all we likely have a windows like path from
      * a wine application.
      */
-   arg = strrchr(program_invocation_name, '\\');
+   arg = strrchr(path, '\\');
     if (arg)
        return arg+1;
-   return program_invocation_name;
+   return path;
  }
  #    define GET_PROGRAM_NAME() __getProgramName()
  #elif defined(__CYGWIN__)

_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Nicholas Kazlauskas


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to