From patchwork Sun Aug 8 10:55:39 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Shubhanshu Saxena X-Patchwork-Id: 29345 Delivered-To: ffmpegpatchwork2@gmail.com Received: by 2002:a6b:6c0f:0:0:0:0:0 with SMTP id a15csp1981246ioh; Sun, 8 Aug 2021 03:57:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzbnZhlwXrcy9tPjMqWCzfUNYJUfdpwx8Dyy7tOTsJla6az4P1DOVJb/b2pcV5ytArLuifu X-Received: by 2002:a05:6402:4245:: with SMTP id g5mr12562318edb.222.1628420237044; Sun, 08 Aug 2021 03:57:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628420237; cv=none; d=google.com; s=arc-20160816; b=QdrxZo0dOeAgYxycHOjyrSdfZJhJY7g4MHq1vlDVVgC/P3/U5aoxw9UNTQUQ0RatjW UTD2Ql3KvoaS3G1Zixg1e8H+92Y1YPlRvVe+gw7JrnKe/nABEH/DcWPZb6JGKPs3VdxM 9cCrkhCkzTC32TRyti4jQ9qSyZG8B7vZPci/7+ZBogx4/5A/Q/8AKxdsO9NQqfAd6FwL ncz3P3OFZ2xw+ZiVcRsm9RHCKuof7EpuPyw6hVO85/Hk++79vtiiJdK7cZ1IRo3SBiGP 2chWcjZs318sPhgX5Yg12GHiYtTKbgg/FnK7JM301Zj4tVupH9Tb0tCndwZRBZdgbmTO EhIw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:mime-version:references:in-reply-to :message-id:date:to:from:dkim-signature:delivered-to; bh=HcVENjH8zUeXJTUVgoQE/5nwBxCzobspYb/vgB82lyU=; b=HX3UKc9E/DBopNyI9pDmZyN3OqLeU7fAjg61fsvL7yPzflzhUlS57k7bHp7zxLqK7b ZBLD5VBcf1cftnnm1sHs1DB6LNEqomS91zx3ivqP6z7/NZBZb5dnahJqAdGNU0kIPf2T wvw83IxxZjG7pN9u83+5z+LZ5zBZBfPUFC5f1jT/Gg+gznscTf+4Y+6rLUrBBBJ8PKZM YpuQc3DG3kXI7R7LyMA23j/zMIwgYGmvs3M84nLaUw9X9Y/QR04QuRGuPvF9e1PCapx9 s5xdyRXUf9xxpJ21izPnY/SFhkmTtmw3Q0HLYqmkI+1v262YiRpWhtpwuwqYwl4Y/KEI DV0w== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=ZcWhVAZR; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id e22si14173209edu.306.2021.08.08.03.57.16; Sun, 08 Aug 2021 03:57:17 -0700 (PDT) Received-SPF: pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) client-ip=79.124.17.100; Authentication-Results: mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=ZcWhVAZR; spf=pass (google.com: domain of ffmpeg-devel-bounces@ffmpeg.org designates 79.124.17.100 as permitted sender) smtp.mailfrom=ffmpeg-devel-bounces@ffmpeg.org; dmarc=fail (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3DCD368A4C5; Sun, 8 Aug 2021 13:56:26 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-pj1-f49.google.com (mail-pj1-f49.google.com [209.85.216.49]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B40B868A4A4 for ; Sun, 8 Aug 2021 13:56:23 +0300 (EEST) Received: by mail-pj1-f49.google.com with SMTP id u5-20020a17090ae005b029017842fe8f82so15926078pjy.0 for ; Sun, 08 Aug 2021 03:56:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=LRTsiIgOHS2t3TDJQ4+CMx0Hal6WW7XWDN4gDxtyPdE=; b=ZcWhVAZRyuBJxULWNZK8K86Sspviyk+dBv3OTQMVfjsIlvggxujJnjShm4WazyjlT7 h4EzLEuU2Z5OuDQdQXWTg3bewnS8ERwJNFTrxUv6eelJ8xJl4Jt08y1SvlyKuI4sUHM+ yr7qfvWM5UBGZNxsn0fCaD5A/BZN9k6l05a6n1QOUlJ9Ot3bzajtaLvDcaJo1G2zYsR2 Zc+Xb7Jcmef1uvdVP2cd4VwnoRlen/tDxl9rrclsiciBohOdacoR21sFvQP9HQvnsECJ bvUOPpsEnqCzgi8mx7zyWNDmeZYN5xXVDVe/y2sUrHC8zx/NgSeoQU5mzP2tWoD45wG0 a9iw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=LRTsiIgOHS2t3TDJQ4+CMx0Hal6WW7XWDN4gDxtyPdE=; b=cOKMFI1CCeTTWzzeaehdJgm10HYFPnaIMEY9nMQfqF9zOnc24eBFknF5nkzSJ5rDiI atEYWaGhfJGGu4phY/KvoriU0onRNRfAnLg5+3bQd4Pa6SPlCwcaU7v5op70i19Vwchh +PZfMzLlpMmYJNQB15IxOXRQMqnifElup8ssGK6DUBZCZIQD6/t1c9V28KAeQM26RWC6 xir3XlH4S2CaS7s+p2OKJdzExXaSC07JRXsR6WtFczWAe4Ne1Apj7N+TVfCN9gwNpHQe 4OzI6ha/a2jZSMCEHKywBZcV+cz353ZaW30zrq971L8ALywxFb5eXrLAfnPrk0cc5zqs JGGA== X-Gm-Message-State: AOAM533r48qJZG0iU7Sc23A1W1/+l5sGLCaQC2dgUTW4m29KMi9dzAlY EFhpcvJQLwWC0Fz18RcrtTUFamTb1tLLLQ== X-Received: by 2002:a17:90b:400e:: with SMTP id ie14mr30587692pjb.156.1628420181731; Sun, 08 Aug 2021 03:56:21 -0700 (PDT) Received: from localhost.localdomain ([103.133.123.69]) by smtp.googlemail.com with ESMTPSA id r18sm20917405pgk.54.2021.08.08.03.56.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 08 Aug 2021 03:56:21 -0700 (PDT) From: Shubhanshu Saxena To: ffmpeg-devel@ffmpeg.org Date: Sun, 8 Aug 2021 16:25:39 +0530 Message-Id: <20210808105539.18822-9-shubhanshu.e01@gmail.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210808105539.18822-1-shubhanshu.e01@gmail.com> References: <20210808105539.18822-1-shubhanshu.e01@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 9/9] [GSoC] lavfi/dnn: DNNAsyncExecModule Execution Failure Handling X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: Shubhanshu Saxena Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" X-TUID: y1jVnkVB4xPz This commit adds the case handling if the asynchronous execution of a request fails by checking the exit status of the thread when joining before starting another execution. On failure, it does the cleanup as well. Signed-off-by: Shubhanshu Saxena --- libavfilter/dnn/dnn_backend_common.c | 23 +++++++++++++++++++---- libavfilter/dnn/dnn_backend_tf.c | 10 +++++++++- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/libavfilter/dnn/dnn_backend_common.c b/libavfilter/dnn/dnn_backend_common.c index 470fffa2ae..426683b73d 100644 --- a/libavfilter/dnn/dnn_backend_common.c +++ b/libavfilter/dnn/dnn_backend_common.c @@ -23,6 +23,9 @@ #include "dnn_backend_common.h" +#define DNN_ASYNC_SUCCESS (void *)0 +#define DNN_ASYNC_FAIL (void *)-1 + int ff_check_exec_params(void *ctx, DNNBackendType backend, DNNFunctionType func_type, DNNExecBaseParams *exec_params) { if (!exec_params) { @@ -79,18 +82,25 @@ static void *async_thread_routine(void *args) DNNAsyncExecModule *async_module = args; void *request = async_module->args; - async_module->start_inference(request); + if (async_module->start_inference(request) != DNN_SUCCESS) { + return DNN_ASYNC_FAIL; + } async_module->callback(request); - return NULL; + return DNN_ASYNC_SUCCESS; } DNNReturnType ff_dnn_async_module_cleanup(DNNAsyncExecModule *async_module) { + void *status = 0; if (!async_module) { return DNN_ERROR; } #if HAVE_PTHREAD_CANCEL - pthread_join(async_module->thread_id, NULL); + pthread_join(async_module->thread_id, &status); + if (status == DNN_ASYNC_FAIL) { + av_log(NULL, AV_LOG_ERROR, "Last Inference Failed.\n"); + return DNN_ERROR; + } #endif async_module->start_inference = NULL; async_module->callback = NULL; @@ -101,6 +111,7 @@ DNNReturnType ff_dnn_async_module_cleanup(DNNAsyncExecModule *async_module) DNNReturnType ff_dnn_start_inference_async(void *ctx, DNNAsyncExecModule *async_module) { int ret; + void *status = 0; if (!async_module) { av_log(ctx, AV_LOG_ERROR, "async_module is null when starting async inference.\n"); @@ -108,7 +119,11 @@ DNNReturnType ff_dnn_start_inference_async(void *ctx, DNNAsyncExecModule *async_ } #if HAVE_PTHREAD_CANCEL - pthread_join(async_module->thread_id, NULL); + pthread_join(async_module->thread_id, &status); + if (status == DNN_ASYNC_FAIL) { + av_log(ctx, AV_LOG_ERROR, "Unable to start inference as previous inference failed.\n"); + return DNN_ERROR; + } ret = pthread_create(&async_module->thread_id, NULL, async_thread_routine, async_module); if (ret != 0) { av_log(ctx, AV_LOG_ERROR, "Unable to start async inference.\n"); diff --git a/libavfilter/dnn/dnn_backend_tf.c b/libavfilter/dnn/dnn_backend_tf.c index fb3f6f5ea6..ffec1b1328 100644 --- a/libavfilter/dnn/dnn_backend_tf.c +++ b/libavfilter/dnn/dnn_backend_tf.c @@ -91,6 +91,7 @@ AVFILTER_DEFINE_CLASS(dnn_tensorflow); static DNNReturnType execute_model_tf(TFRequestItem *request, Queue *inference_queue); static void infer_completion_callback(void *args); +static inline void destroy_request_item(TFRequestItem **arg); static void free_buffer(void *data, size_t length) { @@ -172,6 +173,10 @@ static DNNReturnType tf_start_inference(void *args) request->status); if (TF_GetCode(request->status) != TF_OK) { av_log(&tf_model->ctx, AV_LOG_ERROR, "%s", TF_Message(request->status)); + tf_free_request(infer_request); + if (ff_safe_queue_push_back(tf_model->request_queue, request) < 0) { + destroy_request_item(&request); + } return DNN_ERROR; } return DNN_SUCCESS; @@ -1095,7 +1100,10 @@ static DNNReturnType execute_model_tf(TFRequestItem *request, Queue *inference_q } if (task->async) { - return ff_dnn_start_inference_async(ctx, &request->exec_module); + if (ff_dnn_start_inference_async(ctx, &request->exec_module) != DNN_SUCCESS) { + goto err; + } + return DNN_SUCCESS; } else { if (tf_start_inference(request) != DNN_SUCCESS) { goto err;