From 9826eeddf3b87b7da83e0ef6c6a1e6d7784267e0 Mon Sep 17 00:00:00 2001 From: ludwig Date: Sun, 6 Apr 2008 12:59:35 +0000 Subject: 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 --- code/qcommon/vm.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) (limited to 'code/qcommon/vm.c') 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; -- cgit v1.2.3