Commit Graph
50 Commits
Author SHA1 Message Date
libretroadmin f1208a7a5a Make threading lock-free
The core and the headless tools no longer use mutexes, condition variables,
spinlocks, std::atomic, std::thread or volatile flags. Threads hand off through
libretro-common's retro_atomic and rthreads plus a few small pieces on top of
them in Common/Thread: Thread, MpscQueue, EventCounter, ParkingLot waits and
ReaderGate. Every wait blocks until it's woken; nothing polls on a timer.

State that only one thread touches just loses its lock. The PSP filesystem,
sceIo and the savedata dialog now belong to the emulation thread: async reads
and writes run when they're queued and complete later in emulated time, and
the IO and savedata threads are gone. The friend finder only talks to the
adhoc server and hands what it gets to the emulation thread. GPU init always
runs on the thread that starts the game.

The Vulkan render and compile queues, pipeline and render pass caches, delete
list and SPIR-V cache, the GL render queue, the software renderer's jit caches,
the file loader caches, the web debugger, UPnP, input, savestates, logging and
the GE debugger all hand off through queues and atomics. The IR jit's spinning
profiler thread goes.

A CPU thread with nothing to run now sleeps until work is queued instead of
spinning. Headless with --debugger waits for a client while stopped, and ends
the run once every client that connected has left. Web server shutdown keeps
servicing the CPU queue until the server has finished.
2026-10-09 04:56:16 +02:00
libretroadmin 5f0f72bfda 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.
2026-10-08 17:58:46 +02:00
Henrik RydgårdandClaude Opus 5.5 8e92fef527 HTTP: Publish request completion with release/acquire ordering
HTTPRequest::completed_ was a plain bool set on the download thread, and
naett's res->complete a plain int set on its transfer thread. On ARM, the
thread polling Done() could see the flag before the result code or body
written ahead of it, and report a stale code or a partial body.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
2026-10-01 10:26:00 -06:00
Nemoumbra 2c7d4c5613 Small HTTPClient cleanup 2026-08-11 04:12:46 +03:00
Henrik Rydgård 96ae36b7dd Fix some comments, remove redundant fields etc 2026-06-13 17:44:26 +02:00
Henrik Rydgård 2604e169e1 Make progress optional in some function to avoid flouting convention 2026-06-13 17:18:35 +02:00
Henrik Rydgård d4bd7c604c Move a utility function 2026-05-05 15:36:30 +02:00
Henrik Rydgård c686d48268 Add prototype Upload screen and a couple new icons. Some refactoring. 2025-10-27 12:20:20 +01:00
Henrik Rydgård d43b1d4618 String function cleanup 2025-08-31 14:45:41 +02:00
Henrik Rydgård 05b82d6ce4 Allow passing in a custom resolver to HTTPRequest and Connection. This inverts the bad dependency. 2025-08-06 00:16:34 +02:00
Henrik Rydgård 7f877bb16b Implement simple file caching. 2025-01-23 13:28:51 +01:00
Henrik Rydgård e4d08407ab Add fake request class for cached responses. 2025-01-23 13:02:06 +01:00
Henrik Rydgård eb719c43e8 HTTP: Replace ProgressBarMode with a new RequestFlags enum 2025-01-23 12:09:56 +01:00
Henrik Rydgård 5c0553031e Bugfix HTTP, oops 2025-01-23 12:06:31 +01:00
Henrik Rydgård 12adad0494 HTTP request classes code cleanup - move common things up to the base class 2025-01-23 10:16:51 +01:00
AdamN 98dba643f4 Just the sceUtility changes from ANR2ME's branch 2025-01-06 14:38:45 +01:00
ANR2ME f500726762 Changing httpCode to statusLine 2025-01-05 19:24:09 +01:00
ANR2ME 0012818eb7 Implement sceHttp library 2025-01-05 19:14:15 +01:00
Henrik Rydgård 4d6905672e Bunch more linting 2024-10-10 11:57:10 +02:00
Henrik Rydgård 5b717cab04 HTTPClient: Fix issue with HTTP redirects 2024-05-28 11:16:10 +02:00
Henrik Rydgård c5791764d8 Make the i18n T function use std::string_view
Buildfixes, crashfixes

One more

Android buildfix

Buildfix Qt
2024-02-12 18:44:39 +01:00
Henrik Rydgård 546f9d7743 Some cleanups and fixes to obscure crashes 2023-09-24 13:05:25 +02:00
Henrik Rydgård 93bb113009 Common: Rename Download to Request, and the old Request to ServerRequest. 2023-07-21 22:12:00 +02:00
Henrik Rydgård 9535b16740 Use the patched naett functions to implement progress updates 2023-07-21 18:23:33 +02:00
Henrik Rydgård 61db21b12d Cleanup, fix so we can run RetroAchievements with https, and start doing that 2023-07-21 10:49:01 +02:00
Henrik Rydgård fbd980bee6 Get basic Naett requests to work (the store works in https mode) 2023-07-21 10:28:17 +02:00
Henrik Rydgård f13a07f19b Break out Download and RequestManager into its own file 2023-07-21 10:27:40 +02:00
Henrik Rydgård 64eff0dc0b Insert a virtual base class for Download 2023-07-21 10:27:40 +02:00
Henrik Rydgård 370bb4c315 More progressbar improvements 2023-07-18 15:52:14 +02:00
Henrik Rydgård ecea3844b0 Improved progress bar popups for downloads
Now shows the filename, and also there's a delay mode where they'll only
be visible if the download takes more than a second, plus they can be
named.
2023-07-18 15:13:44 +02:00
Henrik Rydgård 84d9b7e75d HTTP user agent plumbing 2023-07-14 15:24:34 +02:00
Henrik Rydgård f6fdaa4f56 Get it to recognize the hash by using the rcheevos hash implementation 2023-06-26 10:01:41 +02:00
Henrik Rydgård 0983927319 Comment cleanup 2023-06-17 23:19:23 +02:00
Henrik Rydgård 31a6cecef9 Allow specifying content-type for posts instead of hardcoding. 2023-06-17 23:18:23 +02:00
Henrik Rydgård 71cb766393 Fix re-entrancy issue in Downloader 2023-06-17 23:18:23 +02:00
Henrik Rydgård 3bc2aaf7ca Set MIME type "correctly" (at least for retro purposes) for POSTs 2023-06-17 23:18:23 +02:00
Henrik Rydgård 601e767e3b HTTPClient: Generalize Download to support GET and POST 2023-06-17 23:18:23 +02:00
Unknown W. Brackets 682f5fae97 UI: Fix reverse-dependency in PathBrowser. 2022-12-27 15:08:57 -08:00
Unknown W. Brackets afcf6d8e65 http: Specify expected mime types in downloads. 2021-08-22 10:03:59 -07:00
Unknown W. Brackets 4c51f4761d http: Add Accept header as a parameter in requests. 2021-08-22 10:03:59 -07:00
Henrik Rydgård 821a6a60aa Store: Display the error code in case of error downloading the json.
See #14572
2021-08-22 12:21:44 +02:00
Unknown W. Brackets 2a9170a2ea http: Use Path for the download file. 2021-05-14 22:46:03 -07:00
Unknown W. Brackets 2f08fb6583 Store: Show a rough speed indicator.
Some of the homebrew are a bit larger, it's nice to see a speed and not
just the progress bar.
2021-05-01 11:20:05 -07:00
Unknown W. Brackets 3379f33882 http: Always use/require progress in requests.
This fixes several cases where we weren't passing cancel flags
consistently.
2021-05-01 11:20:05 -07:00
Unknown W. Brackets af5618705c http: Remove timeoutless requests.
Let's always have timeouts.  This timeout is reset even when a single byte
is sent, so it's pretty generous.
2021-05-01 11:20:05 -07:00
Unknown W. Brackets 1e22966984 http: Separate out net buffer code from formatting. 2021-05-01 11:20:05 -07:00
Unknown W. Brackets a35b21a5d7 http: Set a more useful user agent. 2021-04-30 23:12:42 -07:00
Unknown W. Brackets 7e21e9a721 Common: Cleanup some mismatched indentation.
Also move initialization from constructors in a few places.
2021-04-30 22:59:41 -07:00
Unknown W. Brackets b60074f697 http: Prevent Windows header leak from HTTPClient. 2021-01-09 14:45:03 -08:00
Henrik Rydgård 4f43cff5ca Move fileutil, net, image loaders, ui to Common. (#13506)
* Move and rename file_util/fd_util to Common/File/FileUtil and DirListing

Let's also move net while we're at it.

Move the ZIM/PNG loaders over to Common.

Move the UI framework into Common

iOS buildfix

* Buildfix

* Buildfixes

* Apple buildfix

* This typo again..

* UWP buildfix

* Fix build of PPSSPPQt, such as it is (it's not in good condition...)

* Guess what? Another buildfix.
2020-10-04 20:48:47 +02:00