From patchwork Mon May 28 18:27:03 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stephan Holljes X-Patchwork-Id: 9129 Delivered-To: ffmpegpatchwork@gmail.com Received: by 2002:a02:11c:0:0:0:0:0 with SMTP id c28-v6csp2230997jad; Mon, 28 May 2018 11:27:38 -0700 (PDT) X-Google-Smtp-Source: AB8JxZpcIjLKfgMq45G5GKG+Hh1fsIh544tUr2FzohGnfjvlp0Ssqs1aO3mKJMOgziiJLiHRAMb1 X-Received: by 2002:adf:cc8c:: with SMTP id p12-v6mr10570424wrj.280.1527532058584; Mon, 28 May 2018 11:27:38 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1527532058; cv=none; d=google.com; s=arc-20160816; b=Je5e8fag/AYIxvemRm73fMEL4JvgR/cxiwbDLgHUf+9KkMhjEY5fEuMnIbZYlVU9ig fhCw5LiR8HVPSnG4Q6OBDfHUszP5s6s9Ln3j1d7neEVtiJzpL+SHqWXZ27A9Mmldkc0v FPa3SvsQFLIq3EsDEUJmYXUDhavgl2uL4T3mBGO9Tbxphk/M21xVa1naYck0pXx1GZXW tCYBMtA8WmQF0EIFF/TPTjkUFcUdwxqrAvegi+QtxXbyD4liVh4XvfZvWc8T5CZOU0OQ PxkBVLRtmG/oMqLI+wnfeb4JvZbtzPBP8mV+JjSMnG3F4NamT4j17uEuEv8m4gho/fxk HJrA== 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:cc:reply-to :list-subscribe:list-help:list-post:list-archive:list-unsubscribe :list-id:precedence:subject:references:in-reply-to:message-id:date :to:from:dkim-signature:delivered-to:arc-authentication-results; bh=BA7ciEwWNVUp7iXMf0FeePj9mHjIwl/5kueMFJDG+Ts=; b=ukDwK4lczcTidxDAfX+0ch8Mk0rvcJj0RoGjhDeLmEXYz/adIoNxnxhDuELMcFCsWN V40TfyNyBJdXiJsAj2PROBrkr7ZBHs6Id8OpB8VMgtEDM4E+oRLQCEm0WAEoUtRLZJKr 4WYF95h/CMVtLrmH4I2C/D6nOVcyMIoZldUs68qCfwMvJj+m6qNky/YsUc87SuSIvlEo 9ksmreU9sQX8zyydvgdQshGe3cF+ciBiB9JN2WqUjXbM3sWKG4pMRTHTygEcV48qlP/R FyVkBH0yr5xKYLUyIoxJVLw9ucWYFNHVYdPZElvVYy2dR5Z7e06Qgkx4rTaFJ15y9/CK LUSg== ARC-Authentication-Results: i=1; mx.google.com; dkim=neutral (body hash did not verify) header.i=@googlemail.com header.s=20161025 header.b=bGFNMdJ1; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org. [79.124.17.100]) by mx.google.com with ESMTP id s10-v6si3168707wrb.190.2018.05.28.11.27.38; Mon, 28 May 2018 11:27:38 -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=@googlemail.com header.s=20161025 header.b=bGFNMdJ1; 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=QUARANTINE sp=QUARANTINE dis=NONE) header.from=googlemail.com Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id E9F8068A3C5; Mon, 28 May 2018 21:26:42 +0300 (EEST) X-Original-To: ffmpeg-devel@ffmpeg.org Delivered-To: ffmpeg-devel@ffmpeg.org Received: from mail-wm0-f41.google.com (mail-wm0-f41.google.com [74.125.82.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id D7F66689EFF for ; Mon, 28 May 2018 21:26:39 +0300 (EEST) Received: by mail-wm0-f41.google.com with SMTP id t11-v6so34210064wmt.0 for ; Mon, 28 May 2018 11:27:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=837gB0MPfEoVqY9EnLFL3s6QkOQdGBbTq03UQqR+m9Y=; b=bGFNMdJ1HUR8MaW+fyHjki9YyaDIpEvqEVfbdEw3pAT+Fr+yUIfCTisf8KJMWG1Bmr xoBU6j+8+RS3oE7v5XwbwrFC9lrOdUyHTSXR0N8z9o+mhKcIlIqY47LgAw/+F/F1Lcpc Z6LIvuNsAUIm8iGtFk5kF1z4WP3amUQtkybl2COEZnZkKdw3guSA+fqlLAoXJQQtZgzt WoJzujLU4xcUNVxg0Bis8guXupgXgo64O3Qx5R1D4w7Tv0FO/RqPyhYO0BknV6a/1dXK 2qFFditGIXxP3zNe6uVpws3PjfwKhGUgfw22HV4jTLy9AnEMqp/nI9XcMY9tNAFxTF8w rdrg== 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; bh=837gB0MPfEoVqY9EnLFL3s6QkOQdGBbTq03UQqR+m9Y=; b=OMlZjX+ZCstA/QKxIQLLY+X0IxICxaStIf8dBLVDfWF8lI7IPEuM5RygpIRsv3eekL VIjoh8zbcn+dzb5XWzJKGVV+w3dHjZNFegVYZ2k7NHk9a2LxVz1EJevtz4daNF9ZGjWC 3yfx42BDx/v+IHyFBo1+t5ezC/8BCKMe3avmpbh30TrvrsVSqoU2T5JaT8/NX0CscvvT 1UqT5fKk12svNYZ9x+JLsxbE6oPlz0CDHLAg2GrMOmjUiPHVFQvbUgwVWouX/P/vQnpp YTqhxDlWf6LOdPbP10g96eP6h3TIYWI9DbmyKIaUl85QEfPWv/l+B6V8aS7guJCmPYxd 3Tgw== X-Gm-Message-State: ALKqPwcO8hs6ri38yMeoz21BZPVHnMz60gnr0QSbad8BUZ6ebpIakQLV KlbtGzgr5+OamqKxzjyYRe9XCw== X-Received: by 2002:a1c:fc3:: with SMTP id 186-v6mr10905077wmp.113.1527532042919; Mon, 28 May 2018 11:27:22 -0700 (PDT) Received: from localhost.localdomain ([46.5.2.0]) by smtp.gmail.com with ESMTPSA id g205-v6sm4126285wmg.43.2018.05.28.11.27.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 28 May 2018 11:27:22 -0700 (PDT) From: Stephan Holljes To: ffmpeg-devel@ffmpeg.org Date: Mon, 28 May 2018 20:27:03 +0200 Message-Id: <20180528182711.3221-3-klaxa1337@googlemail.com> X-Mailer: git-send-email 2.16.2 In-Reply-To: <20180528182711.3221-1-klaxa1337@googlemail.com> References: <20180528182711.3221-1-klaxa1337@googlemail.com> Subject: [FFmpeg-devel] [PATCH 02/10] ffserver.c: Check pthread_create for thread creation failure 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: Stephan Holljes MIME-Version: 1.0 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Signed-off-by: Stephan Holljes --- ffserver.c | 34 ++++++++++++++++++++++++++-------- 1 file changed, 26 insertions(+), 8 deletions(-) diff --git a/ffserver.c b/ffserver.c index 5fc7c44..4bbf254 100644 --- a/ffserver.c +++ b/ffserver.c @@ -558,21 +558,35 @@ void *run_server(void *arg) { for (i = 0; i < pub->nb_threads; i++) { winfos[i].pub = pub; winfos[i].thread_id = i; - pthread_create(&w_threads[i], NULL, write_thread, &winfos_p[stream_index][i]); + ret = pthread_create(&w_threads[i], NULL, write_thread, &winfos_p[stream_index][i]); + if (ret != 0) { + pub->shutdown = 1; + goto end; + } } w_threads_p[stream_index] = w_threads; - pthread_create(&r_thread, NULL, read_thread, &rinfos[stream_index]); + ret = pthread_create(&r_thread, NULL, read_thread, &rinfos[stream_index]); + if (ret != 0) { + pub->shutdown = 1; + goto end; + } r_threads[stream_index] = r_thread; } //pthread_create(&a_thread, NULL, accept_thread, &ainfo); accept_thread(&ainfo); + +end: for (stream_index = 0; stream_index < config->nb_streams; stream_index++) { - pthread_join(r_threads[stream_index], NULL); + // in case of thread creation failure this might NULL + if (r_threads[stream_index]) + pthread_join(r_threads[stream_index], NULL); if (pubs[stream_index]) { for (i = 0; i < pubs[stream_index]->nb_threads; i++) { - pthread_join(w_threads_p[stream_index][i], NULL); + // might also be NULL because of thread creation failure + if (w_threads_p[stream_index][i]) + pthread_join(w_threads_p[stream_index][i], NULL); } } av_free(winfos_p[stream_index]); @@ -596,7 +610,7 @@ int main(int argc, char *argv[]) struct HTTPDConfig *configs; int nb_configs; pthread_t *server_threads; - int i; + int i, ret; if (argc < 2) { printf("Usage: %s config.lua\n", argv[0]); @@ -610,12 +624,16 @@ int main(int argc, char *argv[]) } server_threads = av_mallocz_array(nb_configs, sizeof(pthread_t)); for (i = 0; i < nb_configs; i++) { - config_dump(configs + i); - pthread_create(&server_threads[i], NULL, run_server, configs + i); + config_dump(configs + i, stderr); + ret = pthread_create(&server_threads[i], NULL, run_server, configs + i); + if (ret != 0) { + server_threads[i] = 0; + } } for (i = 0; i < nb_configs; i++) { - pthread_join(server_threads[i], NULL); + if (server_threads[i]) + pthread_join(server_threads[i], NULL); config_free(configs + i); } av_free(configs);