mirror of
https://github.com/Atmosphere-NX/Atmosphere.git
synced 2025-06-04 16:53:48 -04:00
sm: implement accurate request deferral semantics
This commit is contained in:
parent
d42f2e4d1b
commit
f768e3c8f9
7 changed files with 196 additions and 75 deletions
|
@ -128,10 +128,6 @@ namespace ams::sf::hipc {
|
|||
|
||||
os::Mutex waitlist_mutex;
|
||||
os::WaitableManagerType waitlist;
|
||||
|
||||
os::Mutex deferred_session_mutex;
|
||||
using DeferredSessionList = typename util::IntrusiveListMemberTraits<&ServerSession::deferred_list_node>::ListType;
|
||||
DeferredSessionList deferred_session_list;
|
||||
private:
|
||||
virtual void RegisterSessionToWaitList(ServerSession *session) override final;
|
||||
void RegisterToWaitList(os::WaitableHolderType *holder);
|
||||
|
@ -143,8 +139,6 @@ namespace ams::sf::hipc {
|
|||
Result ProcessForMitmServer(os::WaitableHolderType *holder);
|
||||
Result ProcessForSession(os::WaitableHolderType *holder);
|
||||
|
||||
void ProcessDeferredSessions();
|
||||
|
||||
template<typename Interface, auto MakeShared>
|
||||
void RegisterServerImpl(Handle port_handle, sm::ServiceName service_name, bool managed, cmif::ServiceObjectHolder &&static_holder) {
|
||||
/* Allocate server memory. */
|
||||
|
@ -176,7 +170,7 @@ namespace ams::sf::hipc {
|
|||
ServerManagerBase(DomainEntryStorage *entry_storage, size_t entry_count) :
|
||||
ServerDomainSessionManager(entry_storage, entry_count),
|
||||
request_stop_event(os::EventClearMode_ManualClear), notify_event(os::EventClearMode_ManualClear),
|
||||
waitable_selection_mutex(false), waitlist_mutex(false), deferred_session_mutex(false)
|
||||
waitable_selection_mutex(false), waitlist_mutex(false)
|
||||
{
|
||||
/* Link waitables. */
|
||||
os::InitializeWaitableManager(std::addressof(this->waitable_manager));
|
||||
|
|
|
@ -45,7 +45,6 @@ namespace ams::sf::hipc {
|
|||
NON_COPYABLE(ServerSession);
|
||||
NON_MOVEABLE(ServerSession);
|
||||
private:
|
||||
util::IntrusiveListNode deferred_list_node;
|
||||
cmif::ServiceObjectHolder srv_obj_holder;
|
||||
cmif::PointerAndSize pointer_buffer;
|
||||
cmif::PointerAndSize saved_message;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue