Fix threading issue when exiting PPSSPP due to unjoined AdhocServer thread when AdhocServer failed to bind the socket and exited the thread early.

This commit is contained in:
ANR2ME 2021-09-28 12:37:45 +07:00
parent 1fd54153fc
commit 6a79f59c06
4 changed files with 8 additions and 9 deletions

View file

@ -40,6 +40,7 @@
#include <thread>
#include <mutex>
#include <atomic>
#include "Common/Net/Resolve.h"
#include "Common/Serialize/Serializer.h"

View file

@ -80,8 +80,7 @@ SceNetAdhocctlUserNode * _db_user = NULL;
SceNetAdhocctlGameNode * _db_game = NULL;
// Server Status
//int _status = 0;
bool adhocServerRunning = false;
std::atomic<bool> adhocServerRunning(false);
std::thread adhocServerThread;
// Crosslink database for cross region Adhoc play

View file

@ -369,5 +369,5 @@ void update_status();
int proAdhocServerThread(int port); // (int argc, char * argv[])
//extern int _status;
extern bool adhocServerRunning;
extern std::atomic<bool> adhocServerRunning;
extern std::thread adhocServerThread;

View file

@ -118,12 +118,11 @@ static int sceNetAdhocPdpRecv(int id, void* addr, void* port, void* buf, void* d
void __NetAdhocShutdown() {
// Kill AdhocServer Thread
if (adhocServerRunning) {
adhocServerRunning = false;
if (adhocServerThread.joinable()) {
adhocServerThread.join();
}
adhocServerRunning = false;
if (adhocServerThread.joinable()) {
adhocServerThread.join();
}
// Checks to avoid confusing logspam
if (netAdhocMatchingInited) {
NetAdhocMatching_Term();
@ -1180,8 +1179,8 @@ void __NetAdhocInit() {
__AdhocServerInit();
// Create built-in AdhocServer Thread
adhocServerRunning = false;
if (g_Config.bEnableWlan && g_Config.bEnableAdhocServer) {
adhocServerRunning = true;
adhocServerThread = std::thread(proAdhocServerThread, SERVER_PORT);
}
}