summaryrefslogtreecommitdiffstats
path: root/src/core/hle/kernel/k_server_session.cpp (unfollow)
Commit message (Collapse)AuthorFilesLines
2022-10-31kernel: invert session request handling flowLiam1-59/+128
2022-10-19kernel: remove most SessionRequestManager handling from KServerSessionLiam1-87/+2
2022-10-19kernel: add KSessionRequestLiam1-53/+90
2022-10-12k_server_session: preliminary support for userspace server sessionsLiam1-13/+230
2022-06-27core: Replace all instances of ResultCode with Resultgerman771-6/+6
2022-06-14common: Change semantics of UNREACHABLE to unconditionally crashLiam1-2/+2
2022-04-23general: Convert source file copyright comments over to SPDXMorph1-3/+2
This formats all copyright comments according to SPDX formatting guidelines. Additionally, this resolves the remaining GPLv2 only licensed files by relicensing them to GPLv2.0-or-later.
2022-04-08hle: kernel: Unify and integrate reference tracking for KServerPort/KServerSession.bunnei1-0/+3
- These are not managed elsewhere, and need to be tracked and closed on emulation shutdown.
2022-03-15core: hle: kernel: Remove server session tracking.bunnei1-4/+1
- These are now allocated/managed by emulated memory, so we do not need to track and free them on shutdown.
2022-03-15core: hle: kernel: k_server_session: Ensure SessionRequestManager is freed.bunnei1-0/+3
2022-03-15core: hle: kernel: Use weak_ptr where possible for SessionRequestHandler and SessionRequestManager.bunnei1-1/+6
2022-01-21hle: kernel: KServerSession: Remove hack for CompleteSyncRequest.bunnei1-11/+0
- This does not appear to be necessary anymore.
2022-01-21hle: kernel: KServerSession: Simplify CompleteSyncRequest EndWait.bunnei1-7/+2
- Considering is_thread_waiting is never set, so we can remove IsThreadWaiting. - KThread::EndWait will take the scheduler lock, so we can remove the redundant lock.
2021-12-07hle: kernel: KServerSession: Migrate to updated KThreadQueue.bunnei1-2/+1
2021-12-07hle: kernel: KThread: Remove tracking of sync object from threads.bunnei1-1/+1
2021-11-04core: Fix transitive include build errorsameerj1-0/+1
2021-11-04core: Remove unused includesameerj1-1/+0
2021-07-21hle: kernel: Track and release server sessions, and protect methods with locks.bunnei1-1/+4
2021-06-08hle: kernel: KServerSession: Work-around scenario where session is closed too early.bunnei1-7/+24
2021-06-08hle: kernel: hle_ipc: Ensure SessionRequestHandler is valid.bunnei1-4/+9
2021-06-08hle: kernel: Remove service thread manager and use weak_ptr.bunnei1-1/+1
- We no longer need to queue up service threads to be destroyed. - Fixes a race condition where a thread could be destroyed too early, which caused a crash in Pokemon Sword/Shield.
2021-06-07hle: kernel: KServerSession: Use ASSERT_MSG where appropriate.bunnei1-1/+1
2021-06-07hle: kernel: k_server_session: Return service thread by strong pointer.bunnei1-1/+1
2021-06-07hle: kernel: k_server_session: Ensure service thread is valid before dereference.bunnei1-1/+3
2021-06-07hle: kernel: KAutoObjectWithListContainer: Use boost::instrusive::rbtree.bunnei1-2/+2
- Fixes some crashes introduced by our common intrusive red/black tree impl.
2021-06-05hle: kernel: Refactor to allocate a ServiceThread per service handler.bunnei1-8/+13
- Previously, we would allocate a thread per session, which adds new threads on CloneCurrentObject. - This results in race conditions with N sessions queuing requests to the same service interface. - Fixes Pokken Tournament DX crashes/softlocks, which were regressed by #6347.
2021-06-02general: Replace RESULT_SUCCESS with ResultSuccessMorph1-8/+8
Transition to PascalCase for result names.
2021-05-21hle: kernel: Implement CloneCurrentObject and improve session management.bunnei1-20/+15
2021-05-11hle: service: Implement IPC::CommandType::Close.bunnei1-2/+2
- This was not actually closing sessions before.
2021-05-08kernel: Eliminate variable shadowingLioncash1-1/+1
Now that the large kernel refactor is merged, we can eliminate the remaining variable shadowing cases.
2021-05-06hle: kernel: Migrate to KHandleTable.bunnei1-1/+1
2021-05-06hle: kernel: Rename Process to KProcess.bunnei1-1/+1
2021-05-06hle: kernel: Migrate KPort, KClientPort, and KServerPort to KAutoObject.bunnei1-1/+1
2021-05-06hle: kernel: Migrate KClientPort to KAutoObject.bunnei1-1/+1
2021-05-06hle: kernel: Migrate KSession, KClientSession, and KServerSession to KAutoObject.bunnei1-29/+36
2021-05-06hle: kernel: Refactor out various KThread std::shared_ptr usage.bunnei1-18/+5
2021-01-29hle: kernel: Recode implementation of KThread to be more accurate.bunnei1-1/+1
2021-01-29core: hle: kernel: Rename Thread to KThread.bunnei1-3/+3
2021-01-11core: hle: kernel: Update KSynchronizationObject.bunnei1-21/+2
2020-12-29hle: kernel: Move ServiceThread ownership to KernelCore.bunnei1-3/+10
- Fixes a circular dependency which prevented threads from being released on shutdown.
2020-12-29hle: kernel: service_thread: Add thread name and take weak_ptr of ServerSession.bunnei1-1/+1
2020-12-29hle: kernel: service_thread: Add parameter for thread pool size.bunnei1-1/+1
2020-12-29core: hle: server_session: Use separate threads for each service connection.bunnei1-16/+4
2020-12-08core: Remove unnecessary enum casts in log callsLioncash1-2/+1
Follows the video core PR. fmt doesn't require casts for enum classes anymore, so we can remove quite a few casts.
2020-12-06hle: kernel: Migrate to KScopedSchedulerLock.bunnei1-1/+1
2020-12-06hle: kernel: Rewrite scheduler implementation based on Mesopshere.bunnei1-1/+1
2020-09-14kernel: Remove all dependencies on the global system instanceLioncash1-3/+3
With this, the kernel finally doesn't depend directly on the global system instance anymore.
2020-07-28core_timing: Make use of uintptr_t to represent user_dataLioncash1-2/+4
Makes the interface future-proofed for supporting other platforms in the event we ever support platforms with differing pointer sizes. This way, we have a type in place that is always guaranteed to be able to represent a pointer exactly.
2020-07-16core_timing: Make TimedCallback take std::chrono::nanosecondsLioncash1-1/+1
Enforces our desired time units directly with a concrete type.
2020-07-16core_timing: Make use of std::chrono with ScheduleEventLioncash1-2/+2
2020-06-27Clang Format.Fernando Sahmkow1-1/+1
2020-06-27SingleCore: Improve Cycle timing Behavior and replace mutex in global scheduler for spinlock.Fernando Sahmkow1-1/+2
2020-06-27SVC: Correct SendSyncRequest.Fernando Sahmkow1-5/+10
2020-05-03hle_ipc: Eliminate core memory globalsLioncash1-2/+2
We can just pass the required instances into the constructor of the request, eliminating all usages of the global system accessor.
2020-04-17core: memory: Move to Core::Memory namespace.bunnei1-2/+3
- helpful to disambiguate Kernel::Memory namespace.
2020-02-14Core: Address FeedbackFernando Sahmkow1-1/+1
2020-02-11Kernel: Refactor synchronization to better match REFernando Sahmkow1-0/+10
2020-02-11Kernel: Change WaitObject to Synchronization object. In order to better reflect RE.Fernando Sahmkow1-1/+1
2019-11-28kernel: Implement a more accurate IPC dispatch.bunnei1-74/+43
2019-11-27core/memory: Migrate over GetPointer()Lioncash1-1/+2
With all of the interfaces ready for migration, it's trivial to migrate over GetPointer().
2019-11-27core: Prepare various classes for memory read/write migrationLioncash1-1/+2
Amends a few interfaces to be able to handle the migration over to the new Memory class by passing the class by reference as a function parameter where necessary. Notably, within the filesystem services, this eliminates two ReadBlock() calls by using the helper functions of HLERequestContext to do that for us.
2019-11-26kernel: Fix reference management for client/server session.bunnei1-9/+9
- Fixes shutdown crash and crash in Pokemon SwSh.
2019-11-25kernel: Replace usage of boost::intrusive_ptr with std::shared_ptr for kernel objects. (#3154)bunnei1-7/+8
* kernel: Replace usage of boost::intrusive_ptr with std::shared_ptr for kernel objects. - See https://github.com/citra-emu/citra/pull/4710 for details.
2019-05-18HLE/IPC: HLEContext can memorize the client thread and use it for SleepClientThreadWeiyi Wang1-1/+1
This reduces the boilerplate that services have to write out the current thread explicitly. Using current thread instead of client thread is also semantically incorrect, and will be a problem when we implement multicore (at which time there will be multiple current threads)
2019-04-10kernel/server_session: Remove obsolete TODOsLioncash1-7/+2
These are holdovers from Citra.
2019-04-06kernel/server_session: Return a std::pair from CreateSessionPair()Lioncash1-1/+1
Keeps the return type consistent with the function name. While we're at it, we can also reduce the amount of boilerplate involved with handling these by using structured bindings.
2019-04-02kernel/wait_object: Make ShouldWait() take thread members by pointer-to-constLioncash1-1/+1
Given this is intended as a querying function, it doesn't make sense to allow the implementer to modify the state of the given thread.
2019-03-08kernel/hle_ipc: Convert std::shared_ptr IPC header instances to std::optionalLioncash1-31/+32
There's no real need to use a shared lifetime here, since we don't actually expose them to anything else. This is also kind of an unnecessary use of the heap given the objects themselves are so small; small enough, in fact that changing over to optionals actually reduces the overall size of the HLERequestContext struct (818 bytes to 808 bytes).
2019-03-06kernel/server_session: Make data members privateLioncash1-0/+28
Makes it much nicer to locally reason about server session behavior, as part of its functionality isn't placed around other classes.
2019-01-01core/kernel: Remove unnecessary inclusionsLioncash1-0/+1
Gets rid of a few unnecessary header dependencies in some source files.
2018-10-30hle_ipc: Add member function for querying the existence of a domain headerLioncash1-1/+1
Gets rid of the need to call the getter and then check for null.
2018-10-30hle_ipc: Make GetDomainMessageHeader return a regular pointerLioncash1-1/+1
Nothing requires the shared owner ship here, so we can just return a plain pointer.
2018-10-20kernel/process: Make the handle table per-processLioncash1-2/+1
In the kernel, there isn't a singular handle table that everything gets tossed into or used, rather, each process gets its own handle table that it uses. This currently isn't an issue for us, since we only execute one process at the moment, but we may as well get this out of the way so it's not a headache later on.
2018-10-04kernel/thread: Make all instance variables privateLioncash1-2/+2
Many of the member variables of the thread class aren't even used outside of the class itself, so there's no need to make those variables public. This change follows in the steps of the previous changes that made other kernel types' members private. The main motivation behind this is that the Thread class will likely change in the future as emulation becomes more accurate, and letting random bits of the emulator access data members of the Thread class directly makes it a pain to shuffle around and/or modify internals. Having all data members public like this also makes it difficult to reason about certain bits of behavior without first verifying what parts of the core actually use them. Everything being public also generally follows the tendency for changes to be introduced in completely different translation units that would otherwise be better introduced as an addition to the Thread class' public interface.
2018-08-31core/core: Replace includes with forward declarations where applicableLioncash1-3/+3
The follow-up to e2457418dae19b889b2ad85255bb95d4cd0e4bff, which replaces most of the includes in the core header with forward declarations. This makes it so that if any of the headers the core header was previously including change, then no one will need to rebuild the bulk of the core, due to core.h being quite a prevalent inclusion. This should make turnaround for changes much faster for developers.
2018-08-29kernel: Eliminate kernel global stateLioncash1-8/+9
As means to pave the way for getting rid of global state within core, This eliminates kernel global state by removing all globals. Instead this introduces a KernelCore class which acts as a kernel instance. This instance lives in the System class, which keeps its lifetime contained to the lifetime of the System class. This also forces the kernel types to actually interact with the main kernel instance itself instead of having transient kernel state placed all over several translation units, keeping everything together. It also has a nice consequence of making dependencies much more explicit. This also makes our initialization a tad bit more correct. Previously we were creating a kernel process before the actual kernel was initialized, which doesn't really make much sense. The KernelCore class itself follows the PImpl idiom, which allows keeping all the implementation details sealed away from everything else, which forces the use of the exposed API and allows us to avoid any unnecessary inclusions within the main kernel header.
2018-08-15kernel/server_session: Add IsSession() member functionLioncash1-1/+1
Allows querying the inverse of IsDomain() to make things more readable. This will likely also be usable in the event of implementing ConvertDomainToSession().
2018-08-12server_session: Provide more useful information and don't crash on bad IPC request.bunnei1-0/+8
2018-08-07client_port: Make all data members privateLioncash1-1/+1
These members don't need to be entirely exposed, we can instead expose an API to operate on them without directly needing to mutate them We can also guard against overflow/API misuse this way as well, given active_sessions is an unsigned value.
2018-07-31kernel: Remove unnecessary includesLioncash1-0/+2
Removes unnecessary direct dependencies in some headers and also gets rid of indirect dependencies that were being relied on to be included.
2018-07-20thread: Convert ThreadStatus into an enum classLioncash1-2/+2
Makes the thread status strongly typed, so implicit conversions can't happen. It also makes it easier to catch mistakes at compile time.
2018-07-19core/memory, core/hle/kernel: Use std::move where applicableLioncash1-1/+2
Avoids pointless copies
2018-07-03Update clang formatJames Rowe1-1/+1
2018-07-03Rename logging macro back to LOG_*James Rowe1-2/+2
2018-05-02general: Make formatting of logged hex values more straightforwardLioncash1-1/+1
This makes the formatting expectations more obvious (e.g. any zero padding specified is padding that's entirely dedicated to the value being printed, not any pretty-printing that also gets tacked on).
2018-05-02ipc: Add support for PopIpcInterface() method.bunnei1-0/+3
- This can be used for domain objects as inputs to service functions.
2018-04-26kernel: Migrate logging macros to fmt-compatible onesLioncash1-3/+3
2018-03-19Clang FixesN00byKing1-1/+2
2018-03-19Clean Warnings (?)N00byKing1-1/+1
2018-03-14core: Move process creation out of global state.bunnei1-1/+2
2018-02-20Fix: change check for domain order and existance of domain message headermailwl1-1/+1
2018-02-20IPC: add domain header to response if only it exists in requestmailwl1-1/+1
2018-02-18 Kernel/IPC: Add a small delay after each SyncRequest to prevent thread starvation.Subv1-41/+56
Ported from citra PR #3091 The delay specified here is from a Nintendo 3DS, and should be measured in a Nintendo Switch. This change is enough to prevent Puyo Puyo Tetris's main thread starvation.
2018-01-25server_session: Fix scenario where all domain handlers are closed.bunnei1-3/+3
2018-01-25hle: Rename RequestBuilder to ResponseBuilder.bunnei1-1/+1
2018-01-25hle: Integrate Domain handling into ServerSession.bunnei1-5/+42
2017-12-29kernel: Fix implementation of ConvertSessionToDomain.bunnei1-2/+9
2017-11-01service: Return proper result code for IPC::CommandType::Close.bunnei1-5/+6
2017-06-25Kernel/ServerSession: Keep track of which threads have issued sync requests.Subv1-6/+16
2017-06-19ResultVal: Remove MoveFrom()Yuri Kunde Schlesner1-1/+1
Replace it with std::move(result_val).Unwrap(), or Foo().Unwrap() in case you already have an rvalue.
2017-06-06Kernel: Add a dedicated SetHleHandler method to ServerPort/ServerSessionYuri Kunde Schlesner1-11/+5
This allows attaching a HLE handle to a ServerPort at any point after it is created, allowing port/session creation to be generic between HLE and regular services.
2017-06-06HLE: Move SessionRequestHandler from Service:: to Kernel::Yuri Kunde Schlesner1-2/+5
Most of the code that works with this is or will be in the kernel, so it's a more appropriate place for it to be.
2017-05-22Kernel/Sessions: Remove the ClientSession::Create function.Subv1-1/+3
It is not meant to be used by anything other than CreateSessionPair.
2017-05-15Kernel: Use a Session object to keep track of the status of a Client/Server session pair.Subv1-7/+22
Reduce the associated port's connection count when a ServerSession is destroyed.
2017-01-04Kernel: Object ShouldWait and Acquire calls now take a thread as a parameter.Subv1-3/+3
This will be useful when implementing mutex priority inheritance.
2016-12-14Fixed the codestyle to match our clang-format rules.Subv1-10/+15
2016-12-09Moved the HLE command buffer translation task to ServerSession instead of the HLE handler superclass.Subv1-2/+13
2016-12-08Added a framework for partially handling Session disconnections.Subv1-2/+8
Further implementation will happen in a future commit. Fixes a regression.
2016-12-08Use std::move where appropriate.Subv1-3/+4
2016-12-05KServerPorts now have an HLE handler "template", which is inherited by all ServerSessions created from it.Subv1-3/+3
2016-12-03Declare empty ServerSession and ClientSession constructors as default.Subv1-2/+2
2016-12-01Fixed the rebase mistakes.Subv1-1/+0
2016-12-01A bit of a redesign.Subv1-13/+12
Sessions and Ports are now detached from each other. HLE services are handled by means of a SessionRequestHandler class, Interface now inherits from this class. The File and Directory classes are no longer kernel objects, but SessionRequestHandlers instead, bound to a ServerSession when requested. File::OpenLinkFile now creates a new session pair and binds the File instance to it.
2016-12-01fixup! Kernel/IPC: Use Ports and Sessions as the fundamental building block of Inter Process Communication.Subv1-1/+1
2016-12-01 Kernel/IPC: Use Ports and Sessions as the fundamental building block of Inter Process Communication.Subv1-0/+58
All handles obtained via srv::GetServiceHandle or svcConnectToPort are references to ClientSessions. Service modules will wait on the counterpart of those ClientSessions (Called ServerSessions) using svcReplyAndReceive or svcWaitSynchronization[1|N], and will be awoken when a SyncRequest is performed. HLE Interfaces are now ClientPorts which override the HandleSyncRequest virtual member function to perform command handling immediately.