@@ -106,7 +106,7 @@ void ov::IAsyncInferRequest::cancel() {
106106
107107void ov::IAsyncInferRequest::set_callback (std::function<void (std::exception_ptr)> callback) {
108108 check_state ();
109- std::lock_guard<std::mutex> callbackLock{m_callback_invoke_mutex};
109+ std::lock_guard callbackLock{m_callback_invoke_mutex};
110110 m_callback = std::move (callback);
111111}
112112
@@ -160,27 +160,20 @@ 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;
164163 {
165- std::lock_guard<std::mutex> callbackLock{m_callback_invoke_mutex};
166- {
167- std::lock_guard<std::mutex> lock{m_mutex};
168- m_state = InferState::IDLE ;
169- promise = std::move (m_promise);
170- }
164+ std::lock_guard<std::mutex> lock{m_mutex};
165+ m_state = InferState::IDLE ;
166+ promise = std::move (m_promise);
167+ }
171168
172- std::swap (callback, m_callback);
173- if (callback) {
174- try {
175- callback (currentException);
176- } catch (...) {
177- currentException = std::current_exception ();
178- }
179- if (!m_callback) {
180- std::swap (callback, m_callback);
181- }
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 ();
182174 }
183175 }
176+
184177 if (nullptr == currentException) {
185178 promise.set_value ();
186179 } else {
@@ -256,7 +249,7 @@ void ov::IAsyncInferRequest::stop_and_wait() {
256249 state = m_state;
257250 if (state != InferState::STOP ) {
258251 {
259- std::lock_guard<std::mutex> callbackLock{m_callback_invoke_mutex};
252+ std::lock_guard callbackLock{m_callback_invoke_mutex};
260253 m_callback = {};
261254 }
262255 m_state = InferState::STOP ;
0 commit comments