gmjs wrote: ↑Sun, 2. Mar 25, 21:01
db48x wrote: ↑Sun, 2. Mar 25, 19:59
...if you strace it what is it doing when it hangs?
strace only outputted one file with "--output-separately". I've uploaded it in case anyone is interested in the contents. (I had a quick look, "diff"-ing it with a working trace, but got bored---it's over 40,000 lines.) Presumably it is waiting for a file descriptor to become available, but I'm not sure.
Ok, cool. That means that there is only one thread, which simplifies everything.
Here are the last few lines:
Code: Select all
write(2, "'NVIDIA GeForce GTX 1650' NVIDIA"..., 77) = 77
write(2, "\n", 1) = 1
write(2, "'llvmpipe (LLVM 15.0.6, 256 bits"..., 77) = 77
write(2, "\n", 1) = 1
poll([{fd=2, events=0}], 1, 0) = 0 (Timeout)
poll([{fd=2, events=POLLIN|POLLOUT}], 1, -1) = 1 ([{fd=2, revents=POLLOUT}])
writev(2, [{iov_base="\230#C\n\1\0\0\0\4\0\0\0\21\0\0\0\372$\0\0+\3\0\0\1\0\0\0\0\0\0\0"..., iov_len=10512}, {iov_base=NULL, iov_len=0}, {iov_base="", iov_len=0}], 3) = 10512
poll([{fd=2, events=POLLIN}], 1, -1 <unfinished ...>) = ?
So it is writing stuff to file descriptor 2, which is usually stderr. But then it calls poll on it, which is weird. That’s something you call if you are waiting for input of some kind, like network packets or user input. Ah, but earlier it closes fd 2 and reopens other files on that same descriptor.
Ok, then it opens a unix socket:
Code: Select all
socket(AF_UNIX, SOCK_STREAM|SOCK_CLOEXEC, 0) = 2
connect(2, {sa_family=AF_UNIX, sun_path=@"/tmp/.X11-unix/X1"}, 20) = 0
That’s clearly connecting to your X server so that it can open a gui window and draw things into it. A natural thing for a game to do, I think you will agree. I can see it authenticating, sending messages, and getting replies, and so on. This log doesn’t have enough information to decode everything that is going on. Then there’s a whole bunch of nonsense, loading libraries and initializing them. libxml, libvorbis, libvulkan, blah, blah, blah. It opens a second connection to X (on fd=3) and does some stuff (surprisingly common actually), Locale databases, XKeysymDB, DBus, finally libGLX.so, big memory allocations, a million lines of shader cache stuff and vulkan nonsense, wait is it reading the shader cache
again? Ok, now we’re back to sending and receiving X messages. Enumerating PCI devices, probably looking for your video card. It sets the CPU affinity. Another X connection, on fd=24 this time, then it closes it after a few messages. Then it opens it again, still on fd=24, sends the same messages again, and closes it again. No idea what that’s all about.
Finally we are back to where we started. It writes the name of the graphics card and some other stuff to fd=2, which is a connection to the X server, then sends some X command, then it blocks waiting for a reply. You killed it before any reply came back, because you got tired of waiting.
So what I see from this strace is that it doesn’t itself contain the answer. To find out more we would have to actually examine the X11 protocol traffic and see what it is doing. If you’re not already bored out of your skull you could follow the instructions at
https://unix.stackexchange.com/question ... ls-traffic and see what you get. If you use socat then be aware that on your computer the pipe is located at “/tmp/.X11-unix/X1” but the example uses “/tmp/.X11-unix/X4”. You’ll need to replace the latter with the former in any commands you type in. Or you could use the strace trick.
gmjs wrote: ↑Sun, 2. Mar 25, 21:01
db48x wrote: ↑Sun, 2. Mar 25, 19:59
This problem doesn’t happen on my machine...
Sorry to double check, but are you running the
GOG release for Linux? I ask only because it looks like you were testing the pre-releases of 7.5, which wasn't an option for Linux GOG users.
No, I’m using the Steam release not the GOG release. Does it only happen with the GOG release? That is certainly useful information for the developers
