[APU] Move XmaContext::Block() to base class with RAII locking
This commit is contained in:
@@ -203,7 +203,16 @@ class XmaContext {
|
|||||||
virtual bool Work() { return false; };
|
virtual bool Work() { return false; };
|
||||||
|
|
||||||
virtual void Enable() {};
|
virtual void Enable() {};
|
||||||
virtual bool Block(bool poll) { return 0; };
|
virtual bool Block(bool poll) {
|
||||||
|
std::unique_lock<xe_mutex> lock(lock_, std::try_to_lock);
|
||||||
|
if (!lock.owns_lock()) {
|
||||||
|
if (poll) {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
lock.lock();
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
virtual void Clear() {};
|
virtual void Clear() {};
|
||||||
virtual void Disable() {};
|
virtual void Disable() {};
|
||||||
virtual void Release() {};
|
virtual void Release() {};
|
||||||
|
|||||||
@@ -139,17 +139,6 @@ void XmaContextFake::Enable() {
|
|||||||
set_is_enabled(true);
|
set_is_enabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool XmaContextFake::Block(bool poll) {
|
|
||||||
if (!lock_.try_lock()) {
|
|
||||||
if (poll) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
lock_.lock();
|
|
||||||
}
|
|
||||||
lock_.unlock();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void XmaContextFake::Clear() {
|
void XmaContextFake::Clear() {
|
||||||
std::lock_guard<xe_mutex> lock(lock_);
|
std::lock_guard<xe_mutex> lock(lock_);
|
||||||
XELOGAPU("XmaContextFake: reset context {}", id());
|
XELOGAPU("XmaContextFake: reset context {}", id());
|
||||||
|
|||||||
@@ -36,7 +36,6 @@ class XmaContextFake : public XmaContext {
|
|||||||
bool Work() override;
|
bool Work() override;
|
||||||
|
|
||||||
void Enable() override;
|
void Enable() override;
|
||||||
bool Block(bool poll) override;
|
|
||||||
void Clear() override;
|
void Clear() override;
|
||||||
void Disable() override;
|
void Disable() override;
|
||||||
void Release() override;
|
void Release() override;
|
||||||
|
|||||||
@@ -122,17 +122,6 @@ void XmaContextMaster::Enable() {
|
|||||||
set_is_enabled(true);
|
set_is_enabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool XmaContextMaster::Block(bool poll) {
|
|
||||||
if (!lock_.try_lock()) {
|
|
||||||
if (poll) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
lock_.lock();
|
|
||||||
}
|
|
||||||
lock_.unlock();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void XmaContextMaster::Clear() {
|
void XmaContextMaster::Clear() {
|
||||||
std::lock_guard<xe_mutex> lock(lock_);
|
std::lock_guard<xe_mutex> lock(lock_);
|
||||||
XELOGAPU("XmaContext: reset context {}", id());
|
XELOGAPU("XmaContext: reset context {}", id());
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ class XmaContextMaster : public XmaContext {
|
|||||||
bool Work();
|
bool Work();
|
||||||
|
|
||||||
void Enable();
|
void Enable();
|
||||||
bool Block(bool poll);
|
|
||||||
void Clear();
|
void Clear();
|
||||||
void Disable();
|
void Disable();
|
||||||
void Release();
|
void Release();
|
||||||
|
|||||||
@@ -208,17 +208,6 @@ bool XmaContextNew::Work() {
|
|||||||
|
|
||||||
void XmaContextNew::Enable() { set_is_enabled(true); }
|
void XmaContextNew::Enable() { set_is_enabled(true); }
|
||||||
|
|
||||||
bool XmaContextNew::Block(bool poll) {
|
|
||||||
if (!lock_.try_lock()) {
|
|
||||||
if (poll) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
lock_.lock();
|
|
||||||
}
|
|
||||||
lock_.unlock();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void XmaContextNew::Clear() {
|
void XmaContextNew::Clear() {
|
||||||
std::lock_guard<xe_mutex> lock(lock_);
|
std::lock_guard<xe_mutex> lock(lock_);
|
||||||
|
|
||||||
|
|||||||
@@ -55,7 +55,6 @@ class XmaContextNew : public XmaContext {
|
|||||||
bool Work();
|
bool Work();
|
||||||
|
|
||||||
void Enable();
|
void Enable();
|
||||||
bool Block(bool poll);
|
|
||||||
void Clear();
|
void Clear();
|
||||||
void Disable();
|
void Disable();
|
||||||
void Release();
|
void Release();
|
||||||
|
|||||||
@@ -123,17 +123,6 @@ void XmaContextOld::Enable() {
|
|||||||
set_is_enabled(true);
|
set_is_enabled(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool XmaContextOld::Block(bool poll) {
|
|
||||||
if (!lock_.try_lock()) {
|
|
||||||
if (poll) {
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
lock_.lock();
|
|
||||||
}
|
|
||||||
lock_.unlock();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void XmaContextOld::Clear() {
|
void XmaContextOld::Clear() {
|
||||||
std::lock_guard<xe_mutex> lock(lock_);
|
std::lock_guard<xe_mutex> lock(lock_);
|
||||||
XELOGAPU("XmaContext: reset context {}", id());
|
XELOGAPU("XmaContext: reset context {}", id());
|
||||||
|
|||||||
@@ -38,7 +38,6 @@ class XmaContextOld : public XmaContext {
|
|||||||
bool Work();
|
bool Work();
|
||||||
|
|
||||||
void Enable();
|
void Enable();
|
||||||
bool Block(bool poll);
|
|
||||||
void Clear();
|
void Clear();
|
||||||
void Disable();
|
void Disable();
|
||||||
void Release();
|
void Release();
|
||||||
|
|||||||
Reference in New Issue
Block a user