From ff563d293cae126ed879b131be3b03a76d09037d Mon Sep 17 00:00:00 2001 From: div0 Date: Mon, 27 Oct 2008 11:22:55 +0000 Subject: [PATCH] if a remaining RadiusDamage recursion exists, print a stack trace for it and avoid the crash git-svn-id: svn://svn.icculus.org/nexuiz/trunk@4915 f962a42d-fe04-0410-a3ab-8c8b0445ebaa --- data/qcsrc/server/g_damage.qc | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/data/qcsrc/server/g_damage.qc b/data/qcsrc/server/g_damage.qc index bfc9e4cf4..1863f76d5 100644 --- a/data/qcsrc/server/g_damage.qc +++ b/data/qcsrc/server/g_damage.qc @@ -819,6 +819,7 @@ vector NearestPointOnBox(entity box, vector org) return nearest; } +float RadiusDamage_running; float RadiusDamage (entity inflictor, entity attacker, float coredamage, float edgedamage, float rad, entity ignore, float forceintensity, float deathtype, entity directhitentity) // Returns total damage applies to creatures { @@ -832,6 +833,21 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e vector nearest; float total_damage_to_creatures; + if(RadiusDamage_running) + { + string save; + print("RadiusDamage called recursively!\n"); + print("Expect stuff to go HORRIBLY wrong.\n"); + print("Causing a stack trace...\n"); + save = cvar_string("prvm_backtraceforwarnings"); + cvar_set("prvm_backtraceforwarnings", "1"); + fclose(-1); // calls VM_Warning + cvar_set("prvm_backtraceforwarnings", save); + return 0; + } + + RadiusDamage_running = 1; + blastorigin = (inflictor.origin + (inflictor.mins + inflictor.maxs) * 0.5); total_damage_to_creatures = 0; @@ -893,5 +909,7 @@ float RadiusDamage (entity inflictor, entity attacker, float coredamage, float e targ = targ.chain; } + RadiusDamage_running = 0; + return total_damage_to_creatures; } -- 2.39.2