Make append and setLastQueuedCommand atomic
Two threads can enqueue to the same HostQueue (HostQueue::enqueue) and result in last queued command being the first one reachine queue_.enqueue NOTE: Temporarly make setLastQueuedCommand empty function to pass the build Change-Id: Id09c3a28d184986f52b2ec86a2f6a18c40df1f0b
This commit is contained in:
committed by
Saleel Kudchadker
parent
453ea922a7
commit
3d15a1e291
@@ -185,7 +185,17 @@ void HostQueue::append(Command& command) {
|
||||
}
|
||||
command.retain();
|
||||
command.setStatus(CL_QUEUED);
|
||||
ScopedLock l(lastCmdLock_);
|
||||
queue_.enqueue(&command);
|
||||
if (!IS_HIP) {
|
||||
return;
|
||||
}
|
||||
// Set last submitted command
|
||||
if (lastEnqueueCommand_ != nullptr) {
|
||||
lastEnqueueCommand_->release();
|
||||
}
|
||||
lastEnqueueCommand_ = &command;
|
||||
lastEnqueueCommand_->retain();
|
||||
}
|
||||
|
||||
bool HostQueue::isEmpty() {
|
||||
@@ -193,18 +203,6 @@ bool HostQueue::isEmpty() {
|
||||
return queue_.empty();
|
||||
}
|
||||
|
||||
void HostQueue::setLastQueuedCommand(Command* lastCommand) {
|
||||
// Set last submitted command
|
||||
ScopedLock l(lastCmdLock_);
|
||||
if (lastEnqueueCommand_ != nullptr) {
|
||||
lastEnqueueCommand_->release();
|
||||
}
|
||||
lastEnqueueCommand_ = lastCommand;
|
||||
if (lastCommand != nullptr) {
|
||||
lastEnqueueCommand_->retain();
|
||||
}
|
||||
}
|
||||
|
||||
Command* HostQueue::getLastQueuedCommand(bool retain) {
|
||||
// Get last submitted command
|
||||
ScopedLock l(lastCmdLock_);
|
||||
|
||||
Reference in New Issue
Block a user