mirror of https://github.com/OpenTTD/OpenTTD
(svn r25017) -Fix [FS#5466]: crash after bootstrap download of 32bits base set due to referencing a deleted mutex
parent
bae033c23d
commit
dcf3df65d3
|
@ -690,6 +690,7 @@ void VideoDriver_SDL::MainLoop()
|
||||||
if (!_draw_threaded) {
|
if (!_draw_threaded) {
|
||||||
_draw_mutex->EndCritical();
|
_draw_mutex->EndCritical();
|
||||||
delete _draw_mutex;
|
delete _draw_mutex;
|
||||||
|
_draw_mutex = NULL;
|
||||||
} else {
|
} else {
|
||||||
/* Wait till the draw mutex has started itself. */
|
/* Wait till the draw mutex has started itself. */
|
||||||
_draw_mutex->WaitForSignal();
|
_draw_mutex->WaitForSignal();
|
||||||
|
@ -757,26 +758,26 @@ void VideoDriver_SDL::MainLoop()
|
||||||
|
|
||||||
/* The gameloop is the part that can run asynchronously. The rest
|
/* The gameloop is the part that can run asynchronously. The rest
|
||||||
* except sleeping can't. */
|
* except sleeping can't. */
|
||||||
if (_draw_threaded) _draw_mutex->EndCritical();
|
if (_draw_mutex != NULL) _draw_mutex->EndCritical();
|
||||||
|
|
||||||
GameLoop();
|
GameLoop();
|
||||||
|
|
||||||
if (_draw_threaded) _draw_mutex->BeginCritical();
|
if (_draw_mutex != NULL) _draw_mutex->BeginCritical();
|
||||||
|
|
||||||
UpdateWindows();
|
UpdateWindows();
|
||||||
_local_palette = _cur_palette;
|
_local_palette = _cur_palette;
|
||||||
} else {
|
} else {
|
||||||
/* Release the thread while sleeping */
|
/* Release the thread while sleeping */
|
||||||
if (_draw_threaded) _draw_mutex->EndCritical();
|
if (_draw_mutex != NULL) _draw_mutex->EndCritical();
|
||||||
CSleep(1);
|
CSleep(1);
|
||||||
if (_draw_threaded) _draw_mutex->BeginCritical();
|
if (_draw_mutex != NULL) _draw_mutex->BeginCritical();
|
||||||
|
|
||||||
NetworkDrawChatMessage();
|
NetworkDrawChatMessage();
|
||||||
DrawMouseCursor();
|
DrawMouseCursor();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* End of the critical part. */
|
/* End of the critical part. */
|
||||||
if (_draw_threaded && !HasModalProgress()) {
|
if (_draw_mutex != NULL && !HasModalProgress()) {
|
||||||
_draw_mutex->SendSignal();
|
_draw_mutex->SendSignal();
|
||||||
} else {
|
} else {
|
||||||
/* Oh, we didn't have threads, then just draw unthreaded */
|
/* Oh, we didn't have threads, then just draw unthreaded */
|
||||||
|
@ -785,7 +786,7 @@ void VideoDriver_SDL::MainLoop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_draw_threaded) {
|
if (_draw_mutex != NULL) {
|
||||||
_draw_continue = false;
|
_draw_continue = false;
|
||||||
/* Sending signal if there is no thread blocked
|
/* Sending signal if there is no thread blocked
|
||||||
* is very valid and results in noop */
|
* is very valid and results in noop */
|
||||||
|
@ -795,14 +796,17 @@ void VideoDriver_SDL::MainLoop()
|
||||||
|
|
||||||
delete _draw_mutex;
|
delete _draw_mutex;
|
||||||
delete _draw_thread;
|
delete _draw_thread;
|
||||||
|
|
||||||
|
_draw_mutex = NULL;
|
||||||
|
_draw_thread = NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
bool VideoDriver_SDL::ChangeResolution(int w, int h)
|
bool VideoDriver_SDL::ChangeResolution(int w, int h)
|
||||||
{
|
{
|
||||||
if (_draw_threaded) _draw_mutex->BeginCritical();
|
if (_draw_mutex != NULL) _draw_mutex->BeginCritical();
|
||||||
bool ret = CreateMainSurface(w, h);
|
bool ret = CreateMainSurface(w, h);
|
||||||
if (_draw_threaded) _draw_mutex->EndCritical();
|
if (_draw_mutex != NULL) _draw_mutex->EndCritical();
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue