From patchwork Fri Nov 24 01:01:55 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: =?utf-8?q?Jan_Ekstr=C3=B6m?= X-Patchwork-Id: 6322 Delivered-To: ffmpegpatchwork@gmail.com Received: by 10.2.161.94 with SMTP id m30csp1479926jah; Thu, 23 Nov 2017 17:10:21 -0800 (PST) X-Google-Smtp-Source: AGs4zMb6Qt6nlnvqNXwNatdXm71qNUqk4X3CzxmGVmaVglHY2Ck46c1Zdor7WbxlItomDQ3Hxjzj X-Received: by 10.28.141.194 with SMTP id p185mr8765809wmd.149.1511485821024; Thu, 23 Nov 2017 17:10:21 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1511485820; cv=none; d=google.com; s=arc-20160816; b=a9iGgQksQ9X8kGnnI+zND+KVyqn7HRmXID3RKwNrEznzRi4lxDAn1bXrk23ivGIVKx gSYBzf3ohl5zMl2o5U1EmX/9aBTVTjb1Ev1z9psuHn336QKhyuvvFgV4NlgqBeSOIQC1 Hl4xGzdDOJg2OSKAf4nUGADLGk27NK379wDtp7OiS0Y0fDBiAyqapXBr5g76QiAtXOKS mCui8X+EO9W9rybHiTg18ZxYE2gQI8hMux4TQWC7ET6VUF5SPRGQgVOpZ1wLuClCp+co 0mBCMzP+/Ry96Yhe2ZS/rH7xG1twUmU+zr5QQsLsZ2GXI8rOcYIOtHQWSnWG5tud9+Ps LA1w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=sender:errors-to:content-transfer-encoding:mime-version:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:message-id:date:to:from:dkim-signature :delivered-to:arc-authentication-results; bh=Xin2e/sUyiLffuc8X3GJrlizB6k5rzvmkxd8shnGVeM=; b=qrZ6qu6FJdhud50QZksGd9HCWAR6jlZcRgXmkFOWJ4YebUG/JdLBUs71YJSfMUHlnq 5y8bTGzCmKA8RnO4bruYkMb0+iMYL+n+buuZc7UdOkZ6O91IA1VGowt/qjODpzjM8rOo EckreT7LcWlpu+ppRoSmNmVgAEySBYoiSjGe6c3yIERpsolwOAAuX7VJ9MGIj/zA9jYO Zgrwmj+bt+23hHpYY8ZipRu09eb+1DJQIBjWndwZzMQMLUIwnemUwCT8DYYfaIm94R18 5plgTTbV19LaatZmvUrEhLDkhHYrHdVISxX8XTUWknHmc8CRZUAqltxCRFXyaf/ioisP SUIg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@gmail.com header.s=20161025 header.b=gwcnnTsJ; 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=NONE 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 w63si6134208wma.184.2017.11.23.17.10.19; Thu, 23 Nov 2017 17:10:20 -0800 (PST) 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=gwcnnTsJ; 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=NONE 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 A16B7680283; Fri, 24 Nov 2017 03:10:17 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-lf0-f41.google.com (mail-lf0-f41.google.com [209.85.215.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C87776800CC for ; Fri, 24 Nov 2017 03:10:10 +0200 (EET) Received: by mail-lf0-f41.google.com with SMTP id w23so23669398lfd.11 for ; Thu, 23 Nov 2017 17:10:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:subject:date:message-id; bh=Zt2HxUWfg9de+QlGc41FJcqCYSi3WDAOw9DYQwdcD28=; b=gwcnnTsJE9cxXpB27kFpIh0nHAjTRx+BYAgjSPZVZs9q6NPqLafQuhmx0l+Z2czIgc aJUSF/1hfBjOlbYQ97Ibf4ku4J492HhHGM5YVwkR/dzMC+9i8rP54zuLAMgiDNCTxhEG jfg0Vq5yB7GW1pykhQTBwW+fzVgRNZgumaMa83iMb7qDs/2VHfOFfNpEC27XKWzPQpI1 dnQCL+4TeHcjC6HY4NSyEwuZaQmefDZP5StM/DW2Qoug45Nl1Qua7M5i3v/T3GebQ8Hw WLM0X5Or32JIzYW+9zL7eDOxyZgVLrV/4DDkPYpSHnR4E1sG0BbRtU/d9doKtb/x8mks U1fA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:subject:date:message-id; bh=Zt2HxUWfg9de+QlGc41FJcqCYSi3WDAOw9DYQwdcD28=; b=B/3HvJ2e5hly4U2PKzWOnsR90O1ENPiBLEMiS378L2JGhqN1O8tlkgbKXV4MsdaIqB JcuT7ajvL+wTNCkZnXq7xMKpySD5ibn7N+8LNylg2FXNtBE/v0zAz6NWqse8GbkMh8FD 73i4HAxYMFP1lJMiYFd7PWfCCT9+qoa6LZx+r6ltcv445Zhx4mvmGMkZBx7QVC6iwDJ6 Xxxja3XuTmzVMobm/YpQt2fvSC2l1jsDkhGAfqWaWVq11rQeQcqzS23LKYZqR17FJdiW S7T3J+T5iTXRfjyNB4f/GgTSKF1QNWelapS89aQ9hjf8o43D7fZrW7laOOqAQRjkhZO6 4qwA== X-Gm-Message-State: AJaThX61abWqNr7bGJG8Gsa87DwvBO9yigowNJwj+CTQcVjStWUCP2wS VWRQsHB7W7Zhxuc5B67fAnhYV5f7 X-Received: by 10.46.72.10 with SMTP id v10mr3172880lja.118.1511485317281; Thu, 23 Nov 2017 17:01:57 -0800 (PST) Received: from localhost.localdomain (91-159-194-103.elisa-laajakaista.fi. [91.159.194.103]) by smtp.gmail.com with ESMTPSA id z6sm4025828ljc.8.2017.11.23.17.01.56 for (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 23 Nov 2017 17:01:56 -0800 (PST) From: =?UTF-8?q?Jan=20Ekstr=C3=B6m?= To: ffmpeg-devel@ffmpeg.org Date: Fri, 24 Nov 2017 03:01:55 +0200 Message-Id: <20171124010155.799-1-jeebjp@gmail.com> X-Mailer: git-send-email 2.14.3 Subject: [FFmpeg-devel] [PATCH] hwcontext_d3d11va: properly reset values after release/close X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.20 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 MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Makes the uninit function re-entrable, which can be a common case when an API user first tries to initialize its context, fails, and then finally unrefs the AVHWDevice. Fixes a crash reported by sm2345 on IRC. --- libavutil/hwcontext_d3d11va.c | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/libavutil/hwcontext_d3d11va.c b/libavutil/hwcontext_d3d11va.c index 65dd6651fc..845a4a45fe 100644 --- a/libavutil/hwcontext_d3d11va.c +++ b/libavutil/hwcontext_d3d11va.c @@ -458,20 +458,31 @@ static void d3d11va_device_uninit(AVHWDeviceContext *hwdev) { AVD3D11VADeviceContext *device_hwctx = hwdev->hwctx; - if (device_hwctx->device) + if (device_hwctx->device) { ID3D11Device_Release(device_hwctx->device); + device_hwctx->device = NULL; + } - if (device_hwctx->device_context) + if (device_hwctx->device_context) { ID3D11DeviceContext_Release(device_hwctx->device_context); + device_hwctx->device_context = NULL; + } - if (device_hwctx->video_device) + if (device_hwctx->video_device) { ID3D11VideoDevice_Release(device_hwctx->video_device); + device_hwctx->video_device = NULL; + } - if (device_hwctx->video_context) + if (device_hwctx->video_context) { ID3D11VideoContext_Release(device_hwctx->video_context); + device_hwctx->video_context = NULL; + } - if (device_hwctx->lock == d3d11va_default_lock) + if (device_hwctx->lock == d3d11va_default_lock) { CloseHandle(device_hwctx->lock_ctx); + device_hwctx->lock_ctx = INVALID_HANDLE_VALUE; + device_hwctx->lock = NULL; + } } static int d3d11va_device_create(AVHWDeviceContext *ctx, const char *device,