From 890e12ec766075c75dc41a998a6cd3ebe454db01 Mon Sep 17 00:00:00 2001 From: Alibek Omarov Date: Sun, 9 Feb 2025 15:45:44 +0300 Subject: [PATCH] engine: platform: posix: flush stdout/stderr before everything, include build branch --- engine/platform/posix/crash_glibc.c | 14 ++++++++------ engine/platform/posix/crash_libbacktrace.c | 12 ++++++------ engine/platform/posix/crash_posix.c | 12 ++++++------ 3 files changed, 20 insertions(+), 18 deletions(-) diff --git a/engine/platform/posix/crash_glibc.c b/engine/platform/posix/crash_glibc.c index 24a29490..9380d5d5 100644 --- a/engine/platform/posix/crash_glibc.c +++ b/engine/platform/posix/crash_glibc.c @@ -29,9 +29,15 @@ void Sys_Crash( int signal, siginfo_t *si, void *context ) void *addrs[16]; char **syms; + (void)context; + + // flush buffers before writing directly to descriptors + fflush( stdout ); + fflush( stderr ); + // safe actions first, stack and memory may be corrupted - len = Q_snprintf( message, sizeof( message ), "Ver: " XASH_ENGINE_NAME " " XASH_VERSION " (build %i-%s, %s-%s)\n", - Q_buildnum(), g_buildcommit, Q_buildos(), Q_buildarch() ); + len = Q_snprintf( message, sizeof( message ), "Ver: " XASH_ENGINE_NAME " " XASH_VERSION " (build %i-%s-%s, %s-%s)\n", + Q_buildnum(), g_buildcommit, g_buildbranch, Q_buildos(), Q_buildarch() ); #if !XASH_FREEBSD && !XASH_NETBSD && !XASH_OPENBSD && !XASH_APPLE // they don't have si_ptr len += Q_snprintf( message + len, sizeof( message ) - len, "Crash: signal %d errno %d with code %d at %p %p\n", signal, si->si_errno, si->si_code, si->si_addr, si->si_ptr ); @@ -41,10 +47,6 @@ void Sys_Crash( int signal, siginfo_t *si, void *context ) write( STDERR_FILENO, message, len ); - // flush buffers before writing directly to descriptors - fflush( stdout ); - fflush( stderr ); - // now get log fd and write trace directly to log logfd = Sys_LogFileNo(); write( logfd, message, len ); diff --git a/engine/platform/posix/crash_libbacktrace.c b/engine/platform/posix/crash_libbacktrace.c index 46303b9b..04d4418c 100644 --- a/engine/platform/posix/crash_libbacktrace.c +++ b/engine/platform/posix/crash_libbacktrace.c @@ -125,9 +125,13 @@ void Sys_CrashLibbacktrace( int signal, siginfo_t *si, void *context ) (void)context; + // flush buffers before writing directly to descriptors + fflush( stdout ); + fflush( stderr ); + // safe actions first, stack and memory may be corrupted - len = Q_snprintf( message, sizeof( message ), "Ver: " XASH_ENGINE_NAME " " XASH_VERSION " (build %i-%s, %s-%s)\n", - Q_buildnum(), g_buildcommit, Q_buildos(), Q_buildarch() ); + len = Q_snprintf( message, sizeof( message ), "Ver: " XASH_ENGINE_NAME " " XASH_VERSION " (build %i-%s-%s, %s-%s)\n", + Q_buildnum(), g_buildcommit, g_buildbranch, Q_buildos(), Q_buildarch() ); #if !XASH_FREEBSD && !XASH_NETBSD && !XASH_OPENBSD && !XASH_APPLE // they don't have si_ptr len += Q_snprintf( message + len, sizeof( message ) - len, "Crash: signal %d errno %d with code %d at %p %p\n", signal, si->si_errno, si->si_code, si->si_addr, si->si_ptr ); @@ -137,10 +141,6 @@ void Sys_CrashLibbacktrace( int signal, siginfo_t *si, void *context ) write( STDERR_FILENO, message, len ); - // flush buffers before writing directly to descriptors - fflush( stdout ); - fflush( stderr ); - // now get log fd and write trace directly to log logfd = Sys_LogFileNo(); write( logfd, message, len ); diff --git a/engine/platform/posix/crash_posix.c b/engine/platform/posix/crash_posix.c index 63a408a6..63ad5ecb 100644 --- a/engine/platform/posix/crash_posix.c +++ b/engine/platform/posix/crash_posix.c @@ -71,6 +71,10 @@ void Sys_Crash( int signal, siginfo_t *si, void *context ) ucontext_t *ucontext = (ucontext_t*)context; #endif + // flush buffers before writing directly to descriptors + fflush( stdout ); + fflush( stderr ); + #if XASH_AMD64 #if XASH_FREEBSD pc = (void*)ucontext->uc_mcontext.mc_rip; @@ -118,8 +122,8 @@ void Sys_Crash( int signal, siginfo_t *si, void *context ) #endif // safe actions first, stack and memory may be corrupted - len = Q_snprintf( message, sizeof( message ), "Ver: " XASH_ENGINE_NAME " " XASH_VERSION " (build %i-%s, %s-%s)\n", - Q_buildnum(), g_buildcommit, Q_buildos(), Q_buildarch() ); + len = Q_snprintf( message, sizeof( message ), "Ver: " XASH_ENGINE_NAME " " XASH_VERSION " (build %i-%s-%s, %s-%s)\n", + Q_buildnum(), g_buildcommit, g_buildbranch, Q_buildos(), Q_buildarch() ); #if !XASH_FREEBSD && !XASH_NETBSD && !XASH_OPENBSD && !XASH_APPLE len += Q_snprintf( message + len, sizeof( message ) - len, "Crash: signal %d errno %d with code %d at %p %p\n", signal, si->si_errno, si->si_code, si->si_addr, si->si_ptr ); @@ -129,10 +133,6 @@ void Sys_Crash( int signal, siginfo_t *si, void *context ) write( STDERR_FILENO, message, len ); - // flush buffers before writing directly to descriptors - fflush( stdout ); - fflush( stderr ); - // now get log fd and write trace directly to log logfd = Sys_LogFileNo(); write( logfd, message, len );