From f90a0697545b475bd7d062ef0cb7a8f97ea7bf1d Mon Sep 17 00:00:00 2001 From: Indev Date: Sun, 4 Feb 2024 16:12:14 +0300 Subject: [PATCH 1/3] If have libbacktrace, write crash reports from I_Error --- src/sdl/i_system.c | 38 ++++++++++++++++++++++++++++++++++---- 1 file changed, 34 insertions(+), 4 deletions(-) diff --git a/src/sdl/i_system.c b/src/sdl/i_system.c index c04434347..0e921d73b 100644 --- a/src/sdl/i_system.c +++ b/src/sdl/i_system.c @@ -205,6 +205,21 @@ static char returnWadPath[256]; // TODO - move this to some header file instead extern struct backtrace_state *bt_state; +typedef struct bt_crash_reason_s { + enum { + BTCRASH_SIGNAL, + BTCRASH_ERRORMSG, + } type; + + union { + INT32 signal; + const char *errormsg; + } value; +} bt_crash_reason_t; + +#define BT_CRASH_REASON_SIGNAL(num) (bt_crash_reason_t){ .type = BTCRASH_SIGNAL, .value = { .signal = num } } +#define BT_CRASH_REASON_ERRORMSG(msg) (bt_crash_reason_t){ .type = BTCRASH_ERRORMSG, .value = { .errormsg = msg } } + static void printsignal(FILE *fp, INT32 num) { switch (num) @@ -295,7 +310,7 @@ static void bt_error_cb(void *data, const char *msg, int errnum) buf->error = true; } -static void write_backtrace(INT32 num) +static void write_backtrace(bt_crash_reason_t reason) { FILE *out = fopen(va("%s" PATHSEP "%s", srb2home, "srb2kart-crash-log.txt"), "a"); @@ -331,7 +346,17 @@ static void write_backtrace(INT32 num) fprintf(out, "Time of crash: %s\n", asctime(timeinfo)); fprintf(out, "Caused by: "); - printsignal(out, num); + + switch (reason.type) + { + case BTCRASH_SIGNAL: + printsignal(out, reason.value.signal); + break; + + case BTCRASH_ERRORMSG: + fprintf(out, "%s", reason.value.errormsg); + break; + } fprintf(out, "\nBacktrace:\n"); @@ -484,7 +509,7 @@ FUNCNORETURN static ATTRNORETURN void signal_handler(INT32 num) D_QuitNetGame(); // Fix server freezes #ifdef HAVE_LIBBACKTRACE - write_backtrace(num); + write_backtrace(BT_CRASH_REASON_SIGNAL(num)); #endif I_ReportSignal(num, 0); @@ -883,7 +908,7 @@ static void signal_handler_child(INT32 num) { #ifdef HAVE_LIBBACKTRACE - write_backtrace(num); + write_backtrace(BT_CRASH_REASON_SIGNAL(num)); #endif signal(num, SIG_DFL); //default signal action @@ -3508,6 +3533,11 @@ void I_Error(const char *error, ...) vsprintf(buffer, error, argptr); va_end(argptr); I_OutputMsg("\nI_Error(): %s\n", buffer); + +#ifdef HAVE_LIBBACKTRACE + write_backtrace(BT_CRASH_REASON_ERRORMSG(buffer)); +#endif + // --- I_ShutdownConsole(); -- 2.54.0 From d3a4dacb6c2ee96f87a3b25faa3b4d6509539e2d Mon Sep 17 00:00:00 2001 From: Alug Date: Wed, 7 Feb 2024 09:15:17 +0100 Subject: [PATCH 2/3] fix for opengl sprite shadow colour --- src/hardware/hw_main.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/hardware/hw_main.c b/src/hardware/hw_main.c index 2265928d5..79d9e5085 100644 --- a/src/hardware/hw_main.c +++ b/src/hardware/hw_main.c @@ -4063,9 +4063,9 @@ static void HWR_DrawSpriteShadow(gr_vissprite_t *spr, GLPatch_t *gpatch, float t swallVerts[0].t = swallVerts[1].t = gpatch->max_t; } - sSurf.PolyColor.s.red = 0x00; - sSurf.PolyColor.s.blue = 0x00; - sSurf.PolyColor.s.green = 0x00; + sSurf.PolyColor.s.red = 0x01; + sSurf.PolyColor.s.blue = 0x01; + sSurf.PolyColor.s.green = 0x01; // shadow is always half as translucent as the sprite itself if (!cv_translucency.value) // use default translucency (main sprite won't have any translucency) -- 2.54.0 From f87efad86bf3bb454a63db1e35b3e863de5ce671 Mon Sep 17 00:00:00 2001 From: GenericHeroGuy <86008856+GenericHeroGuy@users.noreply.github.com> Date: Thu, 8 Feb 2024 18:49:14 +0100 Subject: [PATCH 3/3] Fix master server thread segfaulting on startup with OpenGL --- src/d_netcmd.c | 26 -------------------------- src/http-mserv.c | 2 ++ src/screen.c | 24 ++++++++++++++++++++++++ 3 files changed, 26 insertions(+), 26 deletions(-) diff --git a/src/d_netcmd.c b/src/d_netcmd.c index 1013a28a5..c64804fef 100644 --- a/src/d_netcmd.c +++ b/src/d_netcmd.c @@ -35,7 +35,6 @@ #include "p_spec.h" #include "m_cheat.h" #include "d_clisrv.h" -#include "v_video.h" #include "d_main.h" #include "m_random.h" #include "f_finale.h" @@ -956,31 +955,6 @@ void D_RegisterClientCommands(void) #endif #endif - // FIXME: not to be here.. but needs be done for config loading - CV_RegisterVar(&cv_globalgamma); - CV_RegisterVar(&cv_globalsaturation); - - CV_RegisterVar(&cv_rhue); - CV_RegisterVar(&cv_yhue); - CV_RegisterVar(&cv_ghue); - CV_RegisterVar(&cv_chue); - CV_RegisterVar(&cv_bhue); - CV_RegisterVar(&cv_mhue); - - CV_RegisterVar(&cv_rgamma); - CV_RegisterVar(&cv_ygamma); - CV_RegisterVar(&cv_ggamma); - CV_RegisterVar(&cv_cgamma); - CV_RegisterVar(&cv_bgamma); - CV_RegisterVar(&cv_mgamma); - - CV_RegisterVar(&cv_rsaturation); - CV_RegisterVar(&cv_ysaturation); - CV_RegisterVar(&cv_gsaturation); - CV_RegisterVar(&cv_csaturation); - CV_RegisterVar(&cv_bsaturation); - CV_RegisterVar(&cv_msaturation); - // m_menu.c //CV_RegisterVar(&cv_compactscoreboard); CV_RegisterVar(&cv_chatheight); diff --git a/src/http-mserv.c b/src/http-mserv.c index 7ad84b71f..08b8821d4 100644 --- a/src/http-mserv.c +++ b/src/http-mserv.c @@ -544,6 +544,8 @@ HMS_fetch_rules (char *buffer, size_t buffer_size) else buffer = NULL; } + else + buffer = NULL; HMS_end(hms); diff --git a/src/screen.c b/src/screen.c index 06be64abf..d7aa1407e 100644 --- a/src/screen.c +++ b/src/screen.c @@ -233,6 +233,30 @@ void SCR_Startup(void) CV_RegisterVar(&cv_menucaps); CV_RegisterVar(&cv_constextsize); + CV_RegisterVar(&cv_globalgamma); + CV_RegisterVar(&cv_globalsaturation); + + CV_RegisterVar(&cv_rhue); + CV_RegisterVar(&cv_yhue); + CV_RegisterVar(&cv_ghue); + CV_RegisterVar(&cv_chue); + CV_RegisterVar(&cv_bhue); + CV_RegisterVar(&cv_mhue); + + CV_RegisterVar(&cv_rgamma); + CV_RegisterVar(&cv_ygamma); + CV_RegisterVar(&cv_ggamma); + CV_RegisterVar(&cv_cgamma); + CV_RegisterVar(&cv_bgamma); + CV_RegisterVar(&cv_mgamma); + + CV_RegisterVar(&cv_rsaturation); + CV_RegisterVar(&cv_ysaturation); + CV_RegisterVar(&cv_gsaturation); + CV_RegisterVar(&cv_csaturation); + CV_RegisterVar(&cv_bsaturation); + CV_RegisterVar(&cv_msaturation); + V_SetPalette(0); } -- 2.54.0