fixed "SCR_UpdateScreen: recursively called" false positives (e.g. after being kicked twice)

This commit is contained in:
myT 2017-12-04 21:01:28 +01:00
parent b4d78a1bc1
commit 8c45c7aa60
2 changed files with 11 additions and 1 deletions

View file

@ -1,6 +1,9 @@
DD Mmm 17 - 1.49 DD Mmm 17 - 1.49
fix: false positives of the "SCR_UpdateScreen: recursively called" fatal error
repro: connect, get kicked, connect, get kicked
fix: crash when the number of shader stages was wrong (would happen with the "brandon" player model) fix: crash when the number of shader stages was wrong (would happen with the "brandon" player model)
fix: the release of a key bound to "+vstr a b" would execute "b" even though the key press didn't execute "a" fix: the release of a key bound to "+vstr a b" would execute "b" even though the key press didn't execute "a"

View file

@ -391,6 +391,13 @@ void SCR_UpdateScreen()
Com_Error( ERR_FATAL, "SCR_UpdateScreen: recursively called" ); Com_Error( ERR_FATAL, "SCR_UpdateScreen: recursively called" );
} }
// Why set to 1 and 0 explicitly?
// Because the increment/decrement approach doesn't work.
// One of the calls below might invoke Com_Error, which will in turn
// call longjmp and "abort" the current frame, meaning the end of this
// function (or any function for that matter) is not always reached.
recursive = 1;
SCR_DrawScreenField( STEREO_CENTER ); SCR_DrawScreenField( STEREO_CENTER );
if ( com_speeds->integer ) { if ( com_speeds->integer ) {
@ -406,6 +413,6 @@ void SCR_UpdateScreen()
re.EndFrame( NULL, NULL, NULL ); re.EndFrame( NULL, NULL, NULL );
} }
--recursive; recursive = 0;
} }