SWDEV-277543 - fix destruction of the stream object

Change-Id: If2f532e66099805a7f05181e63f5454893a1a288
Αυτή η υποβολή περιλαμβάνεται σε:
German Andryeyev
2021-03-17 10:49:52 -04:00
γονέας 06fa63df04
υποβολή 5c360446bf
2 αρχεία άλλαξαν με 17 προσθήκες και 17 διαγραφές
@@ -36,6 +36,17 @@ Stream::Stream(hip::Device* dev, Priority p,
: queue_(nullptr), lock_("Stream Callback lock"), device_(dev),
priority_(p), flags_(f), null_(null_stream), cuMask_(cuMask) {}
// ================================================================================================
Stream::~Stream() {
if (queue_ != nullptr) {
amd::ScopedLock lock(streamSetLock);
streamSet.erase(this);
queue_->release();
queue_ = nullptr;
}
}
// ================================================================================================
bool Stream::Create() {
// Enable queue profiling if a profiler is attached which sets the callback_table flag
@@ -68,10 +79,10 @@ bool Stream::Create() {
amd::ScopedLock lock(streamSetLock);
streamSet.insert(this);
queue_ = queue;
} else {
queue_ = queue;
Destroy();
} else if (queue != nullptr) {
queue->release();
}
return result;
}
@@ -91,18 +102,6 @@ amd::HostQueue* Stream::asHostQueue(bool skip_alloc) {
return queue_;
}
// ================================================================================================
void Stream::Destroy() {
if (queue_ != nullptr) {
amd::ScopedLock lock(streamSetLock);
streamSet.erase(this);
queue_->release();
queue_ = nullptr;
}
delete this;
}
// ================================================================================================
void Stream::Finish() const {
if (queue_ != nullptr) {
@@ -192,6 +191,7 @@ static hipError_t ihipStreamCreate(hipStream_t* stream,
hip::Stream* hStream = new hip::Stream(hip::getCurrentDevice(), priority, flags, false, cuMask);
if (hStream == nullptr || !hStream->Create()) {
delete hStream;
return hipErrorOutOfMemory;
}
@@ -286,7 +286,7 @@ hipError_t hipStreamDestroy(hipStream_t stream) {
HIP_RETURN(hipErrorInvalidHandle);
}
reinterpret_cast<hip::Stream*>(stream)->Destroy();
delete reinterpret_cast<hip::Stream*>(stream);
HIP_RETURN(hipSuccess);
}