Fix black screen on multiple libretro content loads.

Moves ThreadPool teardown to retro_unload_game. Gives ThreadPool threads some breathing room to terminate before game load starts spamming it with tasks.
This commit is contained in:
Stuart Kenny committed 2021-07-08 08:34:48 +01:00
1 parent 752fdc9d4d
commit 02a24cdb7d
3 files changed
+3 -6

No files matched your search

-4
View File
@@ -98,10 +98,6 @@ static void WorkerThreadFunc(GlobalThreadContext *global, ThreadContext *thread)
}
void ThreadManager::Init(int numRealCores, int numLogicalCoresPerCpu) {
if (!global_->threads_.empty()) {
Teardown();
}
numComputeThreads_ = std::min(numRealCores * numLogicalCoresPerCpu, MAX_CORES_TO_USE);
int numThreads = numComputeThreads_ + EXTRA_THREADS;
numThreads_ = numThreads;
+1 -2
View File
@@ -46,6 +46,7 @@ public:
void Init(int numCores, int numLogicalCoresPerCpu);
void EnqueueTask(Task *task, TaskType taskType);
void EnqueueTaskOnThread(int threadNum, Task *task, TaskType taskType);
void Teardown();
// Currently does nothing. It will always be best-effort - maybe it cancels,
// maybe it doesn't. Note that the id is the id() returned by the task. You need to make that
@@ -57,8 +58,6 @@ public:
int GetNumLooperThreads() const;
private:
void Teardown();
GlobalThreadContext *global_ = nullptr;
int numThreads_ = 0;
+2
View File
@@ -675,6 +675,8 @@ void retro_unload_game(void)
delete ctx;
ctx = nullptr;
PSP_CoreParameter().graphicsContext = nullptr;
g_threadManager.Teardown();
}
void retro_reset(void)