Partially fix data race issues around _cur_palette

See: https://github.com/OpenTTD/OpenTTD/issues/8712
This commit is contained in:
Jonathan G Rennison
2021-04-06 19:25:04 +01:00
parent d7b536ca78
commit ef81729dde
3 changed files with 6 additions and 3 deletions

View File

@@ -69,6 +69,7 @@ void VideoDriver_SDL_Default::MakePalette()
_cur_palette.first_dirty = 0;
_cur_palette.count_dirty = 256;
this->local_palette = _cur_palette;
_cur_palette.count_dirty = 0;
this->UpdatePalette();
if (_sdl_surface != _sdl_real_surface) {
@@ -100,9 +101,9 @@ void VideoDriver_SDL_Default::Paint()
{
PerformanceMeasurer framerate(PFE_VIDEO);
if (IsEmptyRect(this->dirty_rect) && _cur_palette.count_dirty == 0) return;
if (IsEmptyRect(this->dirty_rect) && this->local_palette.count_dirty == 0) return;
if (_cur_palette.count_dirty != 0) {
if (this->local_palette.count_dirty != 0) {
Blitter *blitter = BlitterFactory::GetCurrentBlitter();
switch (blitter->UsePaletteAnimation()) {
@@ -121,7 +122,7 @@ void VideoDriver_SDL_Default::Paint()
default:
NOT_REACHED();
}
_cur_palette.count_dirty = 0;
this->local_palette.count_dirty = 0;
}
SDL_Rect r = { this->dirty_rect.left, this->dirty_rect.top, this->dirty_rect.right - this->dirty_rect.left, this->dirty_rect.bottom - this->dirty_rect.top };

View File

@@ -257,6 +257,7 @@ void VideoDriver_SDL_Base::CheckPaletteAnim()
if (_cur_palette.count_dirty == 0) return;
this->local_palette = _cur_palette;
_cur_palette.count_dirty = 0;
this->MakeDirty(0, 0, _screen.width, _screen.height);
}

View File

@@ -818,6 +818,7 @@ void VideoDriver_Win32Base::CheckPaletteAnim()
if (_cur_palette.count_dirty == 0) return;
_local_palette = _cur_palette;
_cur_palette.count_dirty = 0;
this->MakeDirty(0, 0, _screen.width, _screen.height);
}