hle: service: Add option for service interfaces to create or use the default thread.
This commit is contained in:
parent
864523327f
commit
bf1750664c
5 changed files with 29 additions and 11 deletions
|
@ -91,8 +91,9 @@ namespace Service {
|
|||
}
|
||||
|
||||
ServiceFrameworkBase::ServiceFrameworkBase(Core::System& system_, const char* service_name_,
|
||||
u32 max_sessions_, InvokerFn* handler_invoker_)
|
||||
: SessionRequestHandler(system_.Kernel(), service_name_), system{system_},
|
||||
ServiceThreadType thread_type, u32 max_sessions_,
|
||||
InvokerFn* handler_invoker_)
|
||||
: SessionRequestHandler(system_.Kernel(), service_name_, thread_type), system{system_},
|
||||
service_name{service_name_}, max_sessions{max_sessions_}, handler_invoker{handler_invoker_} {}
|
||||
|
||||
ServiceFrameworkBase::~ServiceFrameworkBase() {
|
||||
|
|
|
@ -114,7 +114,8 @@ private:
|
|||
Kernel::HLERequestContext& ctx);
|
||||
|
||||
explicit ServiceFrameworkBase(Core::System& system_, const char* service_name_,
|
||||
u32 max_sessions_, InvokerFn* handler_invoker_);
|
||||
ServiceThreadType thread_type, u32 max_sessions_,
|
||||
InvokerFn* handler_invoker_);
|
||||
~ServiceFrameworkBase() override;
|
||||
|
||||
void RegisterHandlersBase(const FunctionInfoBase* functions, std::size_t n);
|
||||
|
@ -176,14 +177,17 @@ protected:
|
|||
/**
|
||||
* Initializes the handler with no functions installed.
|
||||
*
|
||||
* @param system_ The system context to construct this service under.
|
||||
* @param system_ The system context to construct this service under.
|
||||
* @param service_name_ Name of the service.
|
||||
* @param max_sessions_ Maximum number of sessions that can be
|
||||
* connected to this service at the same time.
|
||||
* @param thread_type Specifies the thread type for this service. If this is set to CreateNew,
|
||||
* it creates a new thread for it, otherwise this uses the default thread.
|
||||
* @param max_sessions_ Maximum number of sessions that can be connected to this service at the
|
||||
* same time.
|
||||
*/
|
||||
explicit ServiceFramework(Core::System& system_, const char* service_name_,
|
||||
ServiceThreadType thread_type = ServiceThreadType::Default,
|
||||
u32 max_sessions_ = ServerSessionCountMax)
|
||||
: ServiceFrameworkBase(system_, service_name_, max_sessions_, Invoker) {}
|
||||
: ServiceFrameworkBase(system_, service_name_, thread_type, max_sessions_, Invoker) {}
|
||||
|
||||
/// Registers handlers in the service.
|
||||
template <std::size_t N>
|
||||
|
|
|
@ -206,7 +206,7 @@ void SM::UnregisterService(Kernel::HLERequestContext& ctx) {
|
|||
}
|
||||
|
||||
SM::SM(ServiceManager& service_manager_, Core::System& system_)
|
||||
: ServiceFramework{system_, "sm:", 4},
|
||||
: ServiceFramework{system_, "sm:", ServiceThreadType::Default, 4},
|
||||
service_manager{service_manager_}, kernel{system_.Kernel()} {
|
||||
RegisterHandlers({
|
||||
{0, &SM::Initialize, "Initialize"},
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue