From: Youngjae Shin Date: Mon, 6 Jan 2020 04:55:43 +0000 (+0900) Subject: Revise check restrict X-Git-Tag: submit/tizen/20200319.043412~21 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=3a32023e4b13dcdad3ee1a0d0e411d7beb7d3050;p=platform%2Fcore%2Fsystem%2Fmodes.git Revise check restrict --- diff --git a/example/mode/tizen_conflict2_mode.xml b/example/mode/tizen_conflict2_mode.xml index cb14161..0c21e0a 100644 --- a/example/mode/tizen_conflict2_mode.xml +++ b/example/mode/tizen_conflict2_mode.xml @@ -1,6 +1,6 @@ - 2 + 2 diff --git a/supervisor/Action.cpp b/supervisor/Action.cpp index 89b7e1c..55c4d36 100644 --- a/supervisor/Action.cpp +++ b/supervisor/Action.cpp @@ -21,13 +21,13 @@ MODES_NAMESPACE_USE; Action::Action() - : isChanged(false), type(SYNC), plugin(nullptr), piAction(nullptr), stopOnErr(false), restriction(REQ_NONE) + : isChanged(false), type(SYNC), plugin(nullptr), piAction(nullptr), stopOnErr(false), restriction(REQ_NONE), locked(false) { } Action::Action(const std::string &name) - : ruleName(name), isChanged(false), type(SYNC), plugin(nullptr), piAction(nullptr), stopOnErr(false), restriction(REQ_NONE) + : ruleName(name), isChanged(false), type(SYNC), plugin(nullptr), piAction(nullptr), stopOnErr(false), restriction(REQ_NONE), locked(false) { } @@ -92,6 +92,16 @@ Action::ActionRestrict Action::getRestrict() return restriction; } +void Action::setLocked(bool lock) +{ + locked = lock; +} + +bool Action::isLocked() +{ + return locked; +} + void Action::setPlugin(Plugin *pi) { plugin = pi; diff --git a/supervisor/Action.h b/supervisor/Action.h index 64abbab..8228a05 100644 --- a/supervisor/Action.h +++ b/supervisor/Action.h @@ -45,6 +45,8 @@ public: std::string getID(); void setRestrict(const ActionRestrict &data); ActionRestrict getRestrict(); + void setLocked(bool lock); + bool isLocked(); void setStopOnErr(bool val); bool getStopOnErr(); void setType(ActionType val); @@ -71,6 +73,7 @@ private: std::string privilege; bool stopOnErr; ActionRestrict restriction; + bool locked; }; MODES_NAMESPACE_END diff --git a/supervisor/Mode.cpp b/supervisor/Mode.cpp index bf4da24..d0cc5a5 100644 --- a/supervisor/Mode.cpp +++ b/supervisor/Mode.cpp @@ -74,6 +74,9 @@ int Mode::apply() { std::list>::iterator it; for (it = actionList.begin(); it != actionList.end(); it++) { + if ((*it)->isLocked()) //It was checked by ConflictManager(isConflict) + continue; + if (Action::ActionType::ASYNC == (*it)->getType()) { std::thread(&Action::apply, *it).detach(); } else { @@ -91,6 +94,9 @@ int Mode::applyOneShot() { std::list>::iterator it; for (it = actionList.begin(); it != actionList.end(); it++) { + if ((*it)->isLocked()) //It was checked by ConflictManager(isConflict) + continue; + if (Action::ActionType::ASYNC == (*it)->getType()) { std::thread(&Action::applyOneShot, *it).detach(); } else { diff --git a/supervisor/ModeCareTaker.cpp b/supervisor/ModeCareTaker.cpp index acfc175..50884db 100644 --- a/supervisor/ModeCareTaker.cpp +++ b/supervisor/ModeCareTaker.cpp @@ -84,7 +84,7 @@ bool ModeCareTaker::isExclusive() return exclusive; } -bool ModeCareTaker::findRestrictAction(const std::string &ruleName) +bool ModeCareTaker::findLockedAction(const std::string &ruleName) { for (auto modeIt = savedModes.begin(); modeIt != savedModes.end(); modeIt++) { std::list> actionList = (modeIt->second).getActionList(); @@ -102,10 +102,14 @@ bool ModeCareTaker::findRestrictAction(const std::string &ruleName) bool ModeCareTaker::checkConflictAction(const Mode &mode) { + bool stopOnErr = false; std::list> actionList = mode.getActionList(); - for (auto it = actionList.begin(); it != actionList.end(); it++) - if (findRestrictAction((*it)->getRuleName())) - return true; - - return false; + for (auto it = actionList.begin(); it != actionList.end(); it++) { + if (findLockedAction((*it)->getRuleName())) { + (*it)->setLocked(true); + if ((*it)->getStopOnErr()) + stopOnErr = true; + } + } + return stopOnErr; } diff --git a/supervisor/ModeCareTaker.h b/supervisor/ModeCareTaker.h index e871be2..3ac45e2 100644 --- a/supervisor/ModeCareTaker.h +++ b/supervisor/ModeCareTaker.h @@ -35,7 +35,7 @@ public: bool isExclusive(); bool checkConflictAction(const Mode &mode); private: - bool findRestrictAction(const std::string &ruleName); + bool findLockedAction(const std::string &ruleName); std::map savedModes; std::string undoDir; bool exclusive;