From patchwork Fri Feb 28 09:53:16 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Rheinhardt X-Patchwork-Id: 17953 Return-Path: X-Original-To: patchwork@ffaux-bg.ffmpeg.org Delivered-To: patchwork@ffaux-bg.ffmpeg.org Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by ffaux.localdomain (Postfix) with ESMTP id A20D544AE64 for ; Fri, 28 Feb 2020 11:53:58 +0200 (EET) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8629C68B4BE; Fri, 28 Feb 2020 11:53:58 +0200 (EET) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wr1-f66.google.com (mail-wr1-f66.google.com [209.85.221.66]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 9804F68B294 for ; Fri, 28 Feb 2020 11:53:52 +0200 (EET) Received: by mail-wr1-f66.google.com with SMTP id v4so2202116wrs.8 for ; Fri, 28 Feb 2020 01:53:52 -0800 (PST) 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=UM3C/Gvi478yDiaVGOBundZzY/RdB8X805LmpKwIPZc=; b=sUEi/baEzhi303VAqPDx/rFlfq8hHl4FHpMUM0Lv0PP2CA+ODx5KCIt60QjpdwZ8TB 1OOGA78h02yKRG5HfKeqvcat/F0h6th2bLqshZjNEArq4hAT/KMx9triUi3WtsNsfAFv gycmxm6z8U0W6C+jQl9A85OBxcYtQGiM4tc4z2tGpQ4QVkKAlLpCAL/z8Ku47b3j5QAi mbVKErbAUaFq3Q7aLkkmljs6m2R1jbEUQ3kMQaIX3qDCgqeDdBna73CqchTLZH/UH3As OA2U56HbJbCbJNR4cEPMM0oxnw5Ju0gt8zXeYAhZ3JBaxmD1PZMSER4qLSX+ETw4EeyY 8WkQ== 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=UM3C/Gvi478yDiaVGOBundZzY/RdB8X805LmpKwIPZc=; b=nhw8j8Qk/4u6Z+kMpMZSQTOBt7PSSQt5VJjrhKqpUnhBUOHcLm9hl1IeWCFj6paCpV 7U2gHmOYmNjY964xwCaTbE/qCKnhHxcpUnUtqdTNgGGBwluHtIWBGN8KBXkxjgpIAnDa o/wEF7RUBCYQfjirezC5NGcSkdMnY/+08hTQIEznMgcQkwRzWpMDJ2d8EX1Mz2NzvYh4 iLHg5rXL4MDUZlx2KjMDRDRuCqh5SQhvpQkmNbPIGn3U0tYp0PKo3ghgVBtERwAmya3Q yxzwOpKBhP9PBmYgD2wfNfTxfyb2/yrcn6JUXGnCBWdPcoHoDqzhvEjGKsWmyQ6kEgCW PQZQ== X-Gm-Message-State: APjAAAUSD6OAJdse6FULgOxGduhqfbrW0AdRkFhDLoZI+oNF6N74zauI /fsjl5FZiO3g1pmf0+rAdDNR/N48 X-Google-Smtp-Source: APXvYqzwJTHcb3uZXPO1Nr5R0b4C5TA+5WKA+0tse6P2Ngb4bCw08CyuZj6quqhPmwXb2xn+SmpVdw== X-Received: by 2002:adf:f60b:: with SMTP id t11mr4077513wrp.344.1582883631723; Fri, 28 Feb 2020 01:53:51 -0800 (PST) Received: from sblaptop.fritz.box (ipbcc1ab4b.dynamic.kabel-deutschland.de. [188.193.171.75]) by smtp.gmail.com with ESMTPSA id c8sm1453360wru.7.2020.02.28.01.53.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Feb 2020 01:53:51 -0800 (PST) From: Andreas Rheinhardt To: ffmpeg-devel@ffmpeg.org Date: Fri, 28 Feb 2020 10:53:16 +0100 Message-Id: <20200228095321.7222-2-andreas.rheinhardt@gmail.com> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200228095321.7222-1-andreas.rheinhardt@gmail.com> References: <20200228095321.7222-1-andreas.rheinhardt@gmail.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 2/7] avformat/hlsenc: Add deinit function 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 Cc: Andreas Rheinhardt Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" This fixes memleaks in instances such as: a) When an allocation fails at one of the two places in hls_init() where the error is returned immediately without goto fail first. b) When an error happens when writing the header. c) When an allocation fails at one of the three places in hls_write_trailer() where the error is returned immediately without goto fail first. d) When one decides not to write the trailer at all (e.g. because of errors when writing packets). Furthermore, it removes code duplication and allows to return immediately, without goto fail first. Signed-off-by: Andreas Rheinhardt --- libavformat/hlsenc.c | 47 ++++++++++++++++---------------------------- 1 file changed, 17 insertions(+), 30 deletions(-) diff --git a/libavformat/hlsenc.c b/libavformat/hlsenc.c index 51cbfba151..a281c379f0 100644 --- a/libavformat/hlsenc.c +++ b/libavformat/hlsenc.c @@ -2472,8 +2472,9 @@ static int hls_write_packet(AVFormatContext *s, AVPacket *pkt) return ret; } -static void hls_free_variant_streams(struct HLSContext *hls) +static void hls_deinit(AVFormatContext *s) { + HLSContext *hls = s->priv_data; int i = 0; AVFormatContext *vtt_oc = NULL; VariantStream *vs = NULL; @@ -2503,6 +2504,20 @@ static void hls_free_variant_streams(struct HLSContext *hls) av_freep(&vs->baseurl); av_freep(&vs->varname); } + + for (i = 0; i < hls->nb_ccstreams; i++) { + ClosedCaptionsStream *ccs = &hls->cc_streams[i]; + av_freep(&ccs->ccgroup); + av_freep(&ccs->instreamid); + av_freep(&ccs->language); + } + + ff_format_io_close(s, &hls->m3u8_out); + ff_format_io_close(s, &hls->sub_m3u8_out); + av_freep(&hls->key_basename); + av_freep(&hls->var_streams); + av_freep(&hls->cc_streams); + av_freep(&hls->master_m3u8_url); } static int hls_write_trailer(struct AVFormatContext *s) @@ -2635,21 +2650,6 @@ failed: av_free(old_filename); } - hls_free_variant_streams(hls); - - for (i = 0; i < hls->nb_ccstreams; i++) { - ClosedCaptionsStream *ccs = &hls->cc_streams[i]; - av_freep(&ccs->ccgroup); - av_freep(&ccs->instreamid); - av_freep(&ccs->language); - } - - ff_format_io_close(s, &hls->m3u8_out); - ff_format_io_close(s, &hls->sub_m3u8_out); - av_freep(&hls->key_basename); - av_freep(&hls->var_streams); - av_freep(&hls->cc_streams); - av_freep(&hls->master_m3u8_url); return 0; } @@ -2948,20 +2948,6 @@ static int hls_init(AVFormatContext *s) } fail: - if (ret < 0) { - hls_free_variant_streams(hls); - for (i = 0; i < hls->nb_ccstreams; i++) { - ClosedCaptionsStream *ccs = &hls->cc_streams[i]; - av_freep(&ccs->ccgroup); - av_freep(&ccs->instreamid); - av_freep(&ccs->language); - } - av_freep(&hls->key_basename); - av_freep(&hls->var_streams); - av_freep(&hls->cc_streams); - av_freep(&hls->master_m3u8_url); - } - return ret; } @@ -3057,5 +3043,6 @@ AVOutputFormat ff_hls_muxer = { .write_header = hls_write_header, .write_packet = hls_write_packet, .write_trailer = hls_write_trailer, + .deinit = hls_deinit, .priv_class = &hls_class, };