From e05a36822902684ddd2f4effb3ab7e5e7b4fa989 Mon Sep 17 00:00:00 2001
From: black <black@d7cf8633-e32d-0410-b094-e92efae38249>
Date: Wed, 13 Sep 2006 21:07:04 +0000
Subject: [PATCH] Try to fix a dedicated server crash by moving the two csqc_
 cvar initializations into SV_Init. This is a hack, however, so someone else
 please clean this up :) The VM's internal name now is always "client", so
 this should make life easier when debugging (note: this doesn't affect the
 progs filename used).

git-svn-id: svn://svn.icculus.org/twilight/trunk/darkplaces@6585 d7cf8633-e32d-0410-b094-e92efae38249
---
 cl_main.c   | 3 ---
 csprogs.c   | 6 +++---
 csprogs.h   | 2 ++
 progsvm.h   | 2 --
 prvm_cmds.c | 7 ++++---
 sv_main.c   | 8 ++++++++
 6 files changed, 17 insertions(+), 11 deletions(-)

diff --git a/cl_main.c b/cl_main.c
index f4f09c34..8db097db 100644
--- a/cl_main.c
+++ b/cl_main.c
@@ -1742,9 +1742,6 @@ void CL_Init (void)
 //
 // register our commands
 //
-	Cvar_RegisterVariable (&csqc_progname);
-	Cvar_RegisterVariable (&csqc_progcrc);
-
 	Cvar_RegisterVariable (&cl_upspeed);
 	Cvar_RegisterVariable (&cl_forwardspeed);
 	Cvar_RegisterVariable (&cl_backspeed);
diff --git a/csprogs.c b/csprogs.c
index bc01a0a9..9974dd9e 100644
--- a/csprogs.c
+++ b/csprogs.c
@@ -516,11 +516,13 @@ void CL_VM_Init (void)
 	PRVM_Begin;
 	PRVM_InitProg(PRVM_CLIENTPROG);
 
+	csqc_mempool = Mem_AllocPool("CSQC", 0, NULL);
+
 	// allocate the mempools
 	prog->progs_mempool = Mem_AllocPool(csqc_progname.string, 0, NULL);
 	prog->headercrc = CL_PROGHEADER_CRC;
 	prog->edictprivate_size = 0; // no private struct used
-	prog->name = csqc_progname.string;
+	prog->name = CL_NAME;
 	prog->num_edicts = 1;
 	prog->limit_edicts = CL_MAX_EDICTS;
 	prog->extensionstring = vm_cl_extensions;
@@ -553,8 +555,6 @@ void CL_VM_Init (void)
 		return;
 	}
 
-	csqc_mempool = Mem_AllocPool("CSQC", 0, NULL);
-
 	//[515]: optional fields & funcs
 	CL_VM_FindEdictFieldOffsets();
 
diff --git a/csprogs.h b/csprogs.h
index 7d53c7ee..bcfc50a9 100644
--- a/csprogs.h
+++ b/csprogs.h
@@ -1,6 +1,8 @@
 #ifndef CSPROGS_H
 #define CSPROGS_H
 
+#define CL_NAME "client"
+
 #define CL_MAX_EDICTS  (1<<12)
 
 #define ENTMASK_ENGINE				1
diff --git a/progsvm.h b/progsvm.h
index b10d07dd..b0ed47bd 100644
--- a/progsvm.h
+++ b/progsvm.h
@@ -326,7 +326,6 @@ typedef struct prvm_prog_s
 	// number of reserved edicts (allocated from 1)
 	int					reserved_edicts; // [INIT]
 
-
 	prvm_edict_t		*edicts;
 	void				*edictsfields;
 	void				*edictprivate;
@@ -521,7 +520,6 @@ void PRVM_FreeString(int num);
 #define PRVM_End	prog = 0
 #endif
 
-
 //#define PRVM_SAFENAME
 #ifndef PRVM_SAFENAME
 #	define PRVM_NAME	(prog->name)
diff --git a/prvm_cmds.c b/prvm_cmds.c
index 4660532f..96a101e5 100644
--- a/prvm_cmds.c
+++ b/prvm_cmds.c
@@ -17,7 +17,8 @@ void VM_Warning(const char *fmt, ...)
 	va_end(argptr);
 
 	Con_Print(msg);
-	PRVM_PrintState();
+	// TODO: either add a cvar/cmd to control the state dumping or replace some of the calls with Con_Printf [9/13/2006 Black]
+	//PRVM_PrintState();
 }
 
 
@@ -29,8 +30,8 @@ void VM_Warning(const char *fmt, ...)
 static char vm_string_temp[VM_STRINGTEMP_BUFFERS][VM_STRINGTEMP_LENGTH];
 static int vm_string_tempindex = 0;
 
-// TODO: move vm_files and vm_fssearchlist to prvm_prog_t struct
-
+// TODO: (move vm_files and vm_fssearchlist to prvm_prog_t struct)
+// TODO: move vm_files and vm_fssearchlist back [9/13/2006 Black]
 char *VM_GetTempString(void)
 {
 	char *s;
diff --git a/sv_main.c b/sv_main.c
index 6d5b77b6..0eaba842 100644
--- a/sv_main.c
+++ b/sv_main.c
@@ -79,6 +79,13 @@ SV_Init
 */
 void SV_Init (void)
 {
+	// init the csqc progs cvars, since they are updated/used by the server code
+	// TODO: fix this since this is a quick hack to make some of [515]'s broken code run ;) [9/13/2006 Black]
+	extern cvar_t csqc_progname;
+	extern cvar_t csqc_progcrc;
+	Cvar_RegisterVariable (&csqc_progname);
+	Cvar_RegisterVariable (&csqc_progcrc);
+
 	Cmd_AddCommand("sv_saveentfile", SV_SaveEntFile_f, "save map entities to .ent file (to allow external editing)");
 	Cvar_RegisterVariable (&sv_maxvelocity);
 	Cvar_RegisterVariable (&sv_gravity);
@@ -2350,6 +2357,7 @@ void SV_VM_Setup(void)
 	PRVM_InitProg( PRVM_SERVERPROG );
 
 	// allocate the mempools
+	// TODO: move the magic numbers/constants into #defines [9/13/2006 Black]
 	prog->progs_mempool = Mem_AllocPool("Server Progs", 0, NULL);
 	prog->builtins = vm_sv_builtins;
 	prog->numbuiltins = vm_sv_numbuiltins;
-- 
2.39.5