mirror of
https://github.com/hrydgard/ppsspp.git
synced 2026-10-15 07:20:31 +02:00
Remove sleeps and timed polling from networking
Socket waits now block in select() on the socket plus a wake or cancel socket (Common/Net/Cancel), so a stop or cancel ends them at once. - HTTP: cancel flags become net::CancelToken; Connect waits once on all addresses, receives wait instead of spinning, no DNS retry sleep. - Adhoc: the friend finder and adhoc server block on their sockets with a wake socket and a deadline; matching runs on a CoreTiming tick instead of two threads (savestate section bumped). - sceNetInet select/poll check without blocking and park the HLE thread, re-checked from a CoreTiming event until ready or the emulated timeout. - Vendor the aemu_postoffice client (was a submodule) with no sleeps: waits on the socket, close via shutdown and an eventcount, cancelable connects, and lock-free session slot claims. - PortManager waits without a timeout; PSP_InitWait replaces the headless boot poll. - TimeUtil: sleep_us/sleep_ms only outside the core; sleep_precise, sleep_random, yield and the Windows timer period are gone. - Unit test for the socket waits.
This commit is contained in:
1 parent
9f13f0f051
commit
5f0f72bfda
58 files changed
+3822
-763
No files matched your search
@@ -859,7 +859,14 @@ BootState PSP_Init(const CoreParameter &coreParam, std::string *error_string) {
|
||||
return BootState::Failed;
|
||||
}
|
||||
|
||||
return PSP_InitWait(error_string);
|
||||
}
|
||||
|
||||
BootState PSP_InitWait(std::string *error_string) {
|
||||
if (g_bootState == BootState::Off)
|
||||
return BootState::Off;
|
||||
// Every path out of the loader thread sets Complete or Failed.
|
||||
_assert_msg_(g_loadingThread.joinable(), "bootstate: %d", (int)g_bootState.load());
|
||||
g_loadingThread.join();
|
||||
return PSP_InitFinish(error_string);
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user