service: Eliminate usages of the global system instance

Completely removes all usages of the global system instance within the
services code by passing in the using system instance to the services.
This commit is contained in:
Lioncash 2020-11-26 15:19:08 -05:00
parent 322349e8cc
commit 1a954b2a59
222 changed files with 1221 additions and 907 deletions

View file

@ -33,8 +33,8 @@ std::optional<u64> GetTitleIDForProcessID(const Core::System& system, u64 proces
}
} // Anonymous namespace
ARP_R::ARP_R(const Core::System& system, const ARPManager& manager)
: ServiceFramework{"arp:r"}, system(system), manager(manager) {
ARP_R::ARP_R(Core::System& system_, const ARPManager& manager_)
: ServiceFramework{system_, "arp:r"}, manager{manager_} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &ARP_R::GetApplicationLaunchProperty, "GetApplicationLaunchProperty"},
@ -152,8 +152,9 @@ class IRegistrar final : public ServiceFramework<IRegistrar> {
public:
explicit IRegistrar(
Core::System& system_,
std::function<ResultCode(u64, ApplicationLaunchProperty, std::vector<u8>)> issuer)
: ServiceFramework{"IRegistrar"}, issue_process_id(std::move(issuer)) {
: ServiceFramework{system_, "IRegistrar"}, issue_process_id{std::move(issuer)} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &IRegistrar::Issue, "Issue"},
@ -237,8 +238,8 @@ private:
std::vector<u8> control;
};
ARP_W::ARP_W(const Core::System& system, ARPManager& manager)
: ServiceFramework{"arp:w"}, system(system), manager(manager) {
ARP_W::ARP_W(Core::System& system_, ARPManager& manager_)
: ServiceFramework{system_, "arp:w"}, manager{manager_} {
// clang-format off
static const FunctionInfo functions[] = {
{0, &ARP_W::AcquireRegistrar, "AcquireRegistrar"},
@ -255,7 +256,7 @@ void ARP_W::AcquireRegistrar(Kernel::HLERequestContext& ctx) {
LOG_DEBUG(Service_ARP, "called");
registrar = std::make_shared<IRegistrar>(
[this](u64 process_id, ApplicationLaunchProperty launch, std::vector<u8> control) {
system, [this](u64 process_id, ApplicationLaunchProperty launch, std::vector<u8> control) {
const auto res = GetTitleIDForProcessID(system, process_id);
if (!res.has_value()) {
return ERR_NOT_REGISTERED;

View file

@ -13,7 +13,7 @@ class IRegistrar;
class ARP_R final : public ServiceFramework<ARP_R> {
public:
explicit ARP_R(const Core::System& system, const ARPManager& manager);
explicit ARP_R(Core::System& system_, const ARPManager& manager_);
~ARP_R() override;
private:
@ -22,20 +22,18 @@ private:
void GetApplicationControlProperty(Kernel::HLERequestContext& ctx);
void GetApplicationControlPropertyWithApplicationId(Kernel::HLERequestContext& ctx);
const Core::System& system;
const ARPManager& manager;
};
class ARP_W final : public ServiceFramework<ARP_W> {
public:
explicit ARP_W(const Core::System& system, ARPManager& manager);
explicit ARP_W(Core::System& system_, ARPManager& manager_);
~ARP_W() override;
private:
void AcquireRegistrar(Kernel::HLERequestContext& ctx);
void DeleteProperties(Kernel::HLERequestContext& ctx);
const Core::System& system;
ARPManager& manager;
std::shared_ptr<IRegistrar> registrar;
};

View file

@ -6,7 +6,7 @@
namespace Service::Glue {
BGTC_T::BGTC_T() : ServiceFramework{"bgtc:t"} {
BGTC_T::BGTC_T(Core::System& system_) : ServiceFramework{system_, "bgtc:t"} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "NotifyTaskStarting"},
@ -31,7 +31,7 @@ BGTC_T::BGTC_T() : ServiceFramework{"bgtc:t"} {
BGTC_T::~BGTC_T() = default;
BGTC_SC::BGTC_SC() : ServiceFramework{"bgtc:sc"} {
BGTC_SC::BGTC_SC(Core::System& system_) : ServiceFramework{system_, "bgtc:sc"} {
// clang-format off
static const FunctionInfo functions[] = {
{1, nullptr, "GetState"},

View file

@ -6,17 +6,21 @@
#include "core/hle/service/service.h"
namespace Core {
class System;
}
namespace Service::Glue {
class BGTC_T final : public ServiceFramework<BGTC_T> {
public:
BGTC_T();
explicit BGTC_T(Core::System& system_);
~BGTC_T() override;
};
class BGTC_SC final : public ServiceFramework<BGTC_SC> {
public:
BGTC_SC();
explicit BGTC_SC(Core::System& system_);
~BGTC_SC() override;
};

View file

@ -18,8 +18,8 @@ void InstallInterfaces(Core::System& system) {
->InstallAsService(system.ServiceManager());
// BackGround Task Controller
std::make_shared<BGTC_T>()->InstallAsService(system.ServiceManager());
std::make_shared<BGTC_SC>()->InstallAsService(system.ServiceManager());
std::make_shared<BGTC_T>(system)->InstallAsService(system.ServiceManager());
std::make_shared<BGTC_SC>(system)->InstallAsService(system.ServiceManager());
}
} // namespace Service::Glue