Fix for crash when exiting whilst NewGRF scan still in progress
See: https://github.com/OpenTTD/OpenTTD/issues/8760
This commit is contained in:
@@ -9,6 +9,7 @@
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "progress.h"
|
||||
#include "video/video_driver.hpp"
|
||||
|
||||
#include <chrono>
|
||||
#include <mutex>
|
||||
@@ -64,3 +65,22 @@ void SleepWhileModalProgress(int milliseconds)
|
||||
std::unique_lock<std::mutex> lk(_modal_progress_cv_mutex);
|
||||
_modal_progress_cv.wait_for(lk, std::chrono::milliseconds(milliseconds), []{ return !_in_modal_progress; });
|
||||
}
|
||||
|
||||
void WaitUntilModalProgressCompleted()
|
||||
{
|
||||
if (HasModalProgress()) {
|
||||
_modal_progress_paint_mutex.unlock();
|
||||
_modal_progress_work_mutex.unlock();
|
||||
|
||||
{
|
||||
std::unique_lock<std::mutex> lk(_modal_progress_cv_mutex);
|
||||
_modal_progress_cv.wait(lk, []{ return !_in_modal_progress; });
|
||||
}
|
||||
|
||||
/* Modal progress thread may need blitter access while we are waiting for it. */
|
||||
VideoDriver::GetInstance()->ReleaseBlitterLock();
|
||||
_modal_progress_paint_mutex.lock();
|
||||
VideoDriver::GetInstance()->AcquireBlitterLock();
|
||||
_modal_progress_work_mutex.lock();
|
||||
}
|
||||
}
|
||||
|
Reference in New Issue
Block a user