mirror of
https://github.com/boykopovar/AnyPS5.git
synced 2026-11-04 13:07:32 +00:00
Merge pull request #10860 from Felipebmaitan/feat/ult-cooperative-scheduler
fix(ult): serialize ulthread publication and join ownership
This commit is contained in:
6 files changed
+539
-55
No files matched your search
@@ -4,7 +4,8 @@
|
||||
|
||||
- [Bound condition variables](../../../core/libs/prx/libSceUlt/Export.cpp) use the creation-time mutex, inferred from PPSA28061 callers of `_sceUltConditionVariableCreate`; the wait caller reloads only the condition argument. Error precedence, busy/state errors, FIFO signal selection and unsupported recursive waits have not been measured on PS5 hardware. Non-null options and waits at recursion depth above one throw. A live condition prevents destroying its bound mutex. Finalization follows the existing host mutex lifecycle: it invalidates conditions and wakes queued or reacquiring waiters with a state error. Scheduling priority and build-version validation are not implemented.
|
||||
|
||||
- [libSceUlt ulthreads](../../../core/libs/prx/libSceUlt/Export.cpp) - Runtime option defaults still omit the native header, stack size, worker affinity and priority fields; affinity depends on unresolved process configuration queries. Concurrent join ownership is not modeled: the native runtime distinguishes an ordinary running thread from one with another joiner. Host threads do not use the guest context or worker scheduler.
|
||||
- [libSceUlt ulthreads](../../../core/libs/prx/libSceUlt/Export.cpp) - Runtime option defaults still omit the native header, stack size, worker affinity and priority fields; affinity depends on unresolved process configuration queries. Host threads do not use the guest context or worker scheduler. Native concurrent-join error values and precedence remain unverified; the host retains running TryJoin `AGAIN` and competing committed-join `STATE` behavior. Guest TLS, cancellation state and cleanup handlers remain host-thread-affine; context migration has no established contract.
|
||||
- [Ulthread completion](../../../core/libs/prx/libSceUlt/Export.cpp) is published before pthread destructors and native teardown finish, so TryJoin can still block in kernel join. ULT releases its join claim on cancellation or exception, but kernel wait allocation can leave native join ownership and wait registration stranded before commitment; exceptions after commitment cannot restore native joinability either. Mocked precommit failures test only ULT rollback. Creation exceptions before handle publication remove the registration; after publication they retain it because a runner may already use its state. These are host lifecycle guarantees, not console measurements.
|
||||
- [libSceUlt queues](../../../core/libs/prx/libSceUlt/Export.cpp) - Queue-data pool destruction and shared slot limits still require comparison with the native node allocator.
|
||||
- [`sceUltConditionVariableCreate` and `sceUltConditionVariableOptParamInitialize`](../../../core/libs/prx/libSceUlt/Export.cpp) (libSceUlt) are absent from the console export list, where only the underscored variants `_sceUltConditionVariableCreate` and `_sceUltConditionVariableOptParamInitialize` appear; their non-underscored signatures are assumed. Condition variable option parameter initialization only zeroes 128 bytes, and its layout without the common header remains unverified on hardware.
|
||||
- [Status query exports](../../../core/libs/prx/libSceUlt/Export.cpp) lack waiter identities, types and wait values. All five synchronization queries throw before writing output when capacity is nonzero and waiters exist; capacity-zero queries still report counts. `sceUltGetUlthreadRuntimeInfo` throws for a non-empty worker array because no worker threads are started. Recovered layouts, waiting records, worker scheduling and priority accounting lack full console validation.
|
||||
|
||||
Reference in new issue
Block a user