libprocessgroup: fix reset of file_v2_name

ProfileAttribute::Reset does not reset file_v2_name, fix that. Also
provide ProfileAttribute::file_name() to consolidate the code.

Bug: 292636609
Signed-off-by: Suren Baghdasaryan <surenb@google.com>
Change-Id: I5b33ca47b4fa5cabf582c8804bd13f72f6e58411
Merged-In: I5b33ca47b4fa5cabf582c8804bd13f72f6e58411
(cherry picked from commit 2ffbeaef3a)
This commit is contained in:
Suren Baghdasaryan 2023-07-25 14:50:18 -07:00
parent be392fc693
commit 72254810d9
3 changed files with 21 additions and 16 deletions

View file

@ -114,9 +114,16 @@ bool FdCacheHelper::IsAppDependentPath(const std::string& path) {
IProfileAttribute::~IProfileAttribute() = default;
void ProfileAttribute::Reset(const CgroupController& controller, const std::string& file_name) {
const std::string& ProfileAttribute::file_name() const {
if (controller()->version() == 2 && !file_v2_name_.empty()) return file_v2_name_;
return file_name_;
}
void ProfileAttribute::Reset(const CgroupController& controller, const std::string& file_name,
const std::string& file_v2_name) {
controller_ = controller;
file_name_ = file_name;
file_v2_name_ = file_v2_name;
}
bool ProfileAttribute::GetPathForTask(int tid, std::string* path) const {
@ -129,12 +136,11 @@ bool ProfileAttribute::GetPathForTask(int tid, std::string* path) const {
return true;
}
const std::string& file_name =
controller()->version() == 2 && !file_v2_name_.empty() ? file_v2_name_ : file_name_;
if (subgroup.empty()) {
*path = StringPrintf("%s/%s", controller()->path(), file_name.c_str());
*path = StringPrintf("%s/%s", controller()->path(), file_name().c_str());
} else {
*path = StringPrintf("%s/%s/%s", controller()->path(), subgroup.c_str(), file_name.c_str());
*path = StringPrintf("%s/%s/%s", controller()->path(), subgroup.c_str(),
file_name().c_str());
}
return true;
}
@ -144,9 +150,7 @@ bool ProfileAttribute::GetPathForUID(uid_t uid, std::string* path) const {
return true;
}
const std::string& file_name =
controller()->version() == 2 && !file_v2_name_.empty() ? file_v2_name_ : file_name_;
*path = StringPrintf("%s/uid_%d/%s", controller()->path(), uid, file_name.c_str());
*path = StringPrintf("%s/uid_%u/%s", controller()->path(), uid, file_name().c_str());
return true;
}
@ -816,7 +820,7 @@ bool TaskProfiles::Load(const CgroupMap& cg_map, const std::string& file_name) {
attributes_[name] =
std::make_unique<ProfileAttribute>(controller, file_attr, file_v2_attr);
} else {
iter->second->Reset(controller, file_attr);
iter->second->Reset(controller, file_attr, file_v2_attr);
}
} else {
LOG(WARNING) << "Controller " << controller_name << " is not found";

View file

@ -32,7 +32,8 @@
class IProfileAttribute {
public:
virtual ~IProfileAttribute() = 0;
virtual void Reset(const CgroupController& controller, const std::string& file_name) = 0;
virtual void Reset(const CgroupController& controller, const std::string& file_name,
const std::string& file_v2_name) = 0;
virtual const CgroupController* controller() const = 0;
virtual const std::string& file_name() const = 0;
virtual bool GetPathForTask(int tid, std::string* path) const = 0;
@ -50,8 +51,9 @@ class ProfileAttribute : public IProfileAttribute {
~ProfileAttribute() = default;
const CgroupController* controller() const override { return &controller_; }
const std::string& file_name() const override { return file_name_; }
void Reset(const CgroupController& controller, const std::string& file_name) override;
const std::string& file_name() const override;
void Reset(const CgroupController& controller, const std::string& file_name,
const std::string& file_v2_name) override;
bool GetPathForTask(int tid, std::string* path) const override;
bool GetPathForUID(uid_t uid, std::string* path) const override;

View file

@ -102,7 +102,8 @@ class ProfileAttributeMock : public IProfileAttribute {
public:
ProfileAttributeMock(const std::string& file_name) : file_name_(file_name) {}
~ProfileAttributeMock() override = default;
void Reset(const CgroupController& controller, const std::string& file_name) override {
void Reset(const CgroupController& controller, const std::string& file_name,
const std::string& file_v2_name) override {
CHECK(false);
}
const CgroupController* controller() const override {
@ -125,9 +126,7 @@ class ProfileAttributeMock : public IProfileAttribute {
return true;
};
bool GetPathForUID(uid_t, std::string*) const override {
return false;
}
bool GetPathForUID(uid_t, std::string*) const override { return false; }
private:
const std::string file_name_;