* Update .editorconfig so my Emacs doesn't add tabs into the YAML files
anymore
* The UPX version in ubuntu doesn't use the NRV library and seems to be
a bit buggier. Furthermore, UPX is GPL and they allow an exception
only if the binary is compressed with the official build. The latter
is not really a problem, nobody will care, but the worse compression
and potential crashes are. So just use the official build for Linux.
Windows was already using it, but to keep it consistent with
UPX_VERSION we now also download it instead of using Chocolatey.
When a PR is updated while the build action hasn't finished yet,
the old action is not automatically cancelled. That build is of
very limited usefulness since its results will not be shown and
are not relevant anymore, so it just wastes resources.
This commit fixes that, now an older build will get cancelled.
Turns out 33ms aren't "more than enough", during shader compilation
the timeout was often reached. Increasing it to 100ms seems to solve
the issue, and it's still short enough to avoid blocking the application for
too long in case something goes wrong.
Since the Linux version seems much more unstable than the Windows one,
having more information where the crash occured will help with figuring
out where the problems are.
This commit adds a simple crash handler that dumps out the stacktrace,
it's only supported on Linux.
This changes `vulkan_check` and other macros to directly take the call
to be executed. It will execute it and check the result, if it's not
successful, it will log an error with the function name.
It also returns the result code, allowing further processing.
The current implementation works insofar as that there is no deadlock,
but unfortunately the `entries` data can become corrupted enough for
the program to crash in the C++ stdlib.
For the new solution we use a shared_timed_mutex, allowing shared read
access to `entries`, and only acquire a unique lock for writing. Since
this can run into a deadlock if an error happens during rendering of
the backlog itself, we only wait 33ms to acquire it (1 frame @ 30 fps).
If we can't get it by that time, we still write to debug output, but not
into `entries`.
The shared_timed_mutex also allows us to wait for a read lock at the
end of the program, so we now wait for 1s instead of giving up immediately.
This commit also fixes a missing synchronization when accessing `history`
that was accidentially removed.