r4915 - trunk/data/qcsrc/server

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Mon Oct 27 07:22:55 EDT 2008


Author: div0
Date: 2008-10-27 07:22:55 -0400 (Mon, 27 Oct 2008)
New Revision: 4915

Modified:
   trunk/data/qcsrc/server/g_damage.qc
Log:
if a remaining RadiusDamage recursion exists, print a stack trace for it and avoid the crash


Modified: trunk/data/qcsrc/server/g_damage.qc
===================================================================
--- trunk/data/qcsrc/server/g_damage.qc	2008-10-27 11:18:21 UTC (rev 4914)
+++ trunk/data/qcsrc/server/g_damage.qc	2008-10-27 11:22:55 UTC (rev 4915)
@@ -819,6 +819,7 @@
 	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 @@
 	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 @@
 		targ = targ.chain;
 	}
 
+	RadiusDamage_running = 0;
+
 	return total_damage_to_creatures;
 }




More information about the nexuiz-commits mailing list