dnn_backend_openvino.c: fix multi-thread issue for async execution

once we mark done for the task in function infer_completion_callback,
the task is possible to be release in function ff_dnn_get_async_result_ov
in another thread just after it, so we need to record request queue
first, instead of using task->ov_model->request_queue later.

Signed-off-by: Guo, Yejun <yejun.guo@intel.com>
This commit is contained in:
Guo, Yejun 2021-02-08 18:46:27 +08:00
parent 51c105a62d
commit 995c33a046

View File

@ -178,6 +178,7 @@ static void infer_completion_callback(void *args)
IEStatusCode status;
RequestItem *request = args;
TaskItem *task = request->tasks[0];
SafeQueue *requestq = task->ov_model->request_queue;
ie_blob_t *output_blob = NULL;
ie_blob_buffer_t blob_buffer;
DNNData output;
@ -243,7 +244,7 @@ static void infer_completion_callback(void *args)
request->task_count = 0;
if (task->async) {
if (ff_safe_queue_push_back(task->ov_model->request_queue, request) < 0) {
if (ff_safe_queue_push_back(requestq, request) < 0) {
av_log(ctx, AV_LOG_ERROR, "Failed to push back request_queue.\n");
return;
}