Skip to content

Commit 89ebe0b

Browse files
committed
Refactor code after copilot review
Signed-off-by: Bogdan Pereanu <bogdan.pereanu@intel.com>
1 parent cda32b9 commit 89ebe0b

1 file changed

Lines changed: 23 additions & 19 deletions

File tree

src/inference/src/dev/iasync_infer_request.cpp

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ ov::IAsyncInferRequest::IAsyncInferRequest(const std::shared_ptr<IInferRequest>&
6666
void ov::IAsyncInferRequest::wait() {
6767
// Just use the last '_futures' member to wait pipeline completion
6868
auto future = [this] {
69-
std::lock_guard<std::mutex> lock{m_mutex};
69+
std::lock_guard lock{m_mutex};
7070
return m_futures.empty() ? std::shared_future<void>{} : m_futures.back();
7171
}();
7272
if (future.valid()) {
@@ -79,7 +79,7 @@ bool ov::IAsyncInferRequest::wait_for(const std::chrono::milliseconds& timeout)
7979

8080
// Just use the last '_futures' member to wait pipeline completion
8181
auto future = [this] {
82-
std::lock_guard<std::mutex> lock{m_mutex};
82+
std::lock_guard lock{m_mutex};
8383
return m_futures.empty() ? std::shared_future<void>{} : m_futures.back();
8484
}();
8585

@@ -98,15 +98,15 @@ bool ov::IAsyncInferRequest::wait_for(const std::chrono::milliseconds& timeout)
9898
}
9999

100100
void ov::IAsyncInferRequest::cancel() {
101-
std::lock_guard<std::mutex> lock{m_mutex};
101+
std::lock_guard lock{m_mutex};
102102
if (m_state == InferState::BUSY) {
103103
m_state = InferState::CANCELLED;
104104
}
105105
}
106106

107107
void ov::IAsyncInferRequest::set_callback(std::function<void(std::exception_ptr)> callback) {
108108
check_state();
109-
std::lock_guard callbackLock{m_callback_invoke_mutex};
109+
std::lock_guard lock{m_mutex};
110110
m_callback = std::move(callback);
111111
}
112112

@@ -160,20 +160,27 @@ ov::threading::Task ov::IAsyncInferRequest::make_next_stage_task(
160160
if ((itEndStage == itNextStage) || (nullptr != currentException)) {
161161
auto lastStageTask = [this, currentException]() mutable {
162162
std::promise<void> promise;
163+
std::function<void(std::exception_ptr)> callback;
163164
{
164-
std::lock_guard<std::mutex> lock{m_mutex};
165-
m_state = InferState::IDLE;
166-
promise = std::move(m_promise);
167-
}
168-
169-
if (std::lock_guard callbackLock{m_callback_invoke_mutex}; m_callback) {
170-
try {
171-
m_callback(currentException);
172-
} catch (...) {
173-
currentException = std::current_exception();
165+
std::lock_guard callbackLock{m_callback_invoke_mutex};
166+
{
167+
std::lock_guard lock{m_mutex};
168+
m_state = InferState::IDLE;
169+
promise = std::move(m_promise);
170+
std::swap(callback, m_callback);
171+
}
172+
if (callback) {
173+
try {
174+
callback(currentException);
175+
} catch (...) {
176+
currentException = std::current_exception();
177+
}
178+
std::lock_guard lock{m_mutex};
179+
if (!m_callback) {
180+
std::swap(callback, m_callback);
181+
}
174182
}
175183
}
176-
177184
if (nullptr == currentException) {
178185
promise.set_value();
179186
} else {
@@ -248,10 +255,7 @@ void ov::IAsyncInferRequest::stop_and_wait() {
248255
std::lock_guard<std::mutex> lock{m_mutex};
249256
state = m_state;
250257
if (state != InferState::STOP) {
251-
{
252-
std::lock_guard callbackLock{m_callback_invoke_mutex};
253-
m_callback = {};
254-
}
258+
m_callback = {};
255259
m_state = InferState::STOP;
256260
futures = std::move(m_futures);
257261
}

0 commit comments

Comments
 (0)