aboutsummaryrefslogtreecommitdiffstats
path: root/code/qcommon/vm.c
diff options
context:
space:
mode:
authorludwig <ludwig@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-04-06 12:59:35 +0000
committerludwig <ludwig@edf5b092-35ff-0310-97b2-ce42778d08ea>2008-04-06 12:59:35 +0000
commit9826eeddf3b87b7da83e0ef6c6a1e6d7784267e0 (patch)
treeb6a0ac10f2457792cc5df153dce6dee3b630bc75 /code/qcommon/vm.c
parentf15ea9a59f6bbc2ff07d5a84b9acd8ed7b086689 (diff)
downloadioquake3-aero-9826eeddf3b87b7da83e0ef6c6a1e6d7784267e0.tar.gz
ioquake3-aero-9826eeddf3b87b7da83e0ef6c6a1e6d7784267e0.zip
set flag to allow forced unload of a running VM
required to prevent a client from exiting if the server disconnects (bug 3585) git-svn-id: svn://svn.icculus.org/quake3/trunk@1300 edf5b092-35ff-0310-97b2-ce42778d08ea
Diffstat (limited to 'code/qcommon/vm.c')
-rw-r--r--code/qcommon/vm.c19
1 files changed, 17 insertions, 2 deletions
diff --git a/code/qcommon/vm.c b/code/qcommon/vm.c
index 919f09c..c2efcd2 100644
--- a/code/qcommon/vm.c
+++ b/code/qcommon/vm.c
@@ -40,6 +40,9 @@ vm_t *currentVM = NULL;
vm_t *lastVM = NULL;
int vm_debugLevel;
+// used by Com_Error to get rid of running vm's before longjmp
+static int forced_unload;
+
#define MAX_VM 3
vm_t vmTable[MAX_VM];
@@ -613,8 +616,12 @@ void VM_Free( vm_t *vm ) {
}
if(vm->callLevel) {
- Com_Error( ERR_FATAL, "VM_Free(%s) on running vm", vm->name );
- return;
+ if(!forced_unload) {
+ Com_Error( ERR_FATAL, "VM_Free(%s) on running vm", vm->name );
+ return;
+ } else {
+ Com_Printf( "forcefully unloading %s vm\n", vm->name );
+ }
}
if(vm->destroy)
@@ -648,6 +655,14 @@ void VM_Clear(void) {
}
}
+void VM_Forced_Unload_Start(void) {
+ forced_unload = 1;
+}
+
+void VM_Forced_Unload_Done(void) {
+ forced_unload = 0;
+}
+
void *VM_ArgPtr( intptr_t intValue ) {
if ( !intValue ) {
return NULL;