Author: Not specified Language: cpp
Description: Not specified Timestamp: 2013-05-16 14:53:12 +0000
View raw paste Reply
  1. void QDECL Com_Error( int code, const char *fmt, ... ) {
  2.         va_list         argptr;
  3.         static int      lastErrorTime;
  4.         static int      errorCount;
  5.         int                     currentTime;
  6.  
  7. #if defined(_WIN32) && defined(_DEBUG)
  8.         if ( code != ERR_DISCONNECT && code != ERR_NEED_CD ) {
  9.                 if (com_noErrorInterrupt && !com_noErrorInterrupt->integer) {
  10.                         __asm {
  11.                                 int 0x03
  12.                         }
  13.                 }
  14.         }
  15. #endif
  16.  
  17.         if ( com_errorEntered )
  18.                 Sys_Error( "recursive error after: %s", com_errorMessage );
  19.  
  20.         com_errorEntered = qtrue;
  21.  
  22.         // when we are running automated scripts, make sure we
  23.         // know if anything failed
  24.         if ( com_buildScript && com_buildScript->integer ) {
  25.                 code = ERR_FATAL;
  26.         }
  27.  
  28.         // if we are getting a solid stream of ERR_DROP, do an ERR_FATAL
  29.         currentTime = Sys_Milliseconds();
  30.         if ( currentTime - lastErrorTime < 100 ) {
  31.                 if ( ++errorCount > 3 ) {
  32.                         code = ERR_FATAL;
  33.                 }
  34.         } else {
  35.                 errorCount = 0;
  36.         }
  37.         lastErrorTime = currentTime;
  38.  
  39.         va_start (argptr,fmt);
  40.         Q_vsnprintf (com_errorMessage,sizeof(com_errorMessage), fmt,argptr);
  41.         va_end (argptr);
  42.  
  43.         if ( code != ERR_DISCONNECT && code != ERR_NEED_CD ) {
  44.                 Cvar_Get("com_errorMessage", "", CVAR_ROM);     //give com_errorMessage a default so it won't come back to life after a resetDefaults
  45.                 Cvar_Set("com_errorMessage", com_errorMessage);
  46.         }
  47.  
  48.         if ( code == ERR_DISCONNECT || code == ERR_SERVERDISCONNECT ) {
  49.                 SV_Shutdown( "Server disconnected" );
  50.                 CL_Disconnect( qtrue );
  51.                 CL_FlushMemory( );
  52.                 // make sure we can get at our local stuff
  53.                 FS_PureServerSetLoadedPaks( "", "" );
  54.                 com_errorEntered = qfalse;
  55.  
  56.                 throw ("DISCONNECTED\n");
  57.         } else if ( code == ERR_DROP ) {
  58.                 Com_Printf ("********************\nERROR: %s\n********************\n", com_errorMessage);
  59.                 SV_Shutdown (va("Server crashed: %s\n",  com_errorMessage));
  60.                 CL_Disconnect( qtrue );
  61.                 CL_FlushMemory( );
  62.                 // make sure we can get at our local stuff
  63.                 FS_PureServerSetLoadedPaks( "", "" );
  64.                 com_errorEntered = qfalse;
  65.  
  66.                 throw ("DROPPED\n");
  67.         } else if ( code == ERR_NEED_CD ) {
  68.                 SV_Shutdown( "Server didn't have CD\n" );
  69.                 if ( com_cl_running && com_cl_running->integer ) {
  70.                         CL_Disconnect( qtrue );
  71.                         CL_FlushMemory( );
  72.                         com_errorEntered = qfalse;
  73.                 } else {
  74.                         Com_Printf("Server didn't have CD\n" );
  75.                 }
  76.  
  77.                 // make sure we can get at our local stuff
  78.                 FS_PureServerSetLoadedPaks( "", "" );
  79.                 com_errorEntered = qfalse;
  80.  
  81.                 throw ("NEED CD\n");
  82.         } else {
  83.                 CL_Shutdown ();
  84.                 SV_Shutdown (va("Server fatal crashed: %s\n", com_errorMessage));
  85.         }
  86.  
  87.         Com_Shutdown ();
  88.  
  89.         Sys_Error ("%s", com_errorMessage);
  90. }
View raw paste Reply