From patchwork Mon Oct 18 19:09:58 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Stefan Schantl X-Patchwork-Id: 4798 Return-Path: Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail01.haj.ipfire.org", Issuer "R3" (verified OK)) by web04.haj.ipfire.org (Postfix) with ESMTPS id 4HY5zm0104z3wcq for ; Mon, 18 Oct 2021 19:10:11 +0000 (UTC) Received: from mail02.haj.ipfire.org (mail02.haj.ipfire.org [172.28.1.201]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384 client-signature ECDSA (P-384) client-digest SHA384) (Client CN "mail02.haj.ipfire.org", Issuer "R3" (verified OK)) by mail01.ipfire.org (Postfix) with ESMTPS id 4HY5zk4Nd7z16B; Mon, 18 Oct 2021 19:10:10 +0000 (UTC) Received: from mail02.haj.ipfire.org (localhost [127.0.0.1]) by mail02.haj.ipfire.org (Postfix) with ESMTP id 4HY5zk1Fn7z2xy0; Mon, 18 Oct 2021 19:10:10 +0000 (UTC) Received: from mail01.ipfire.org (mail01.haj.ipfire.org [172.28.1.202]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) client-signature ECDSA (P-384)) (Client CN "mail01.haj.ipfire.org", Issuer "R3" (verified OK)) by mail02.haj.ipfire.org (Postfix) with ESMTPS id 4HY5zh2P5Tz2xLr for ; Mon, 18 Oct 2021 19:10:08 +0000 (UTC) Received: from [127.0.0.1] (localhost [127.0.0.1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384) server-digest SHA384) (No client certificate requested) by mail01.ipfire.org (Postfix) with ESMTPSA id 4HY5zg3fn7zNh; Mon, 18 Oct 2021 19:10:07 +0000 (UTC) DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003ed25519; t=1634584207; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=ThzQCo8Ixbr/IWSoQFv5zsiuRZYGfucU+UQ7RGKx/PI=; b=tStTREZKwtz1BZ6js4hMGJaWxPBHJptpDnGPtugYpS8u1k68kur5KK/IyyMl0gtYFQvn8O FN4ckL+Oye/3URBg== DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ipfire.org; s=202003rsa; t=1634584207; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=ThzQCo8Ixbr/IWSoQFv5zsiuRZYGfucU+UQ7RGKx/PI=; b=FmwWOf0A0S9VlQ5eLEC8GWskGO4Ta9giMi1y8qT4aQFgG8ZqYHgVBcrPj+PxF5pRRPcpwE RKLBSyM1W8oChuDNJYDbEJVbv0eu+5AUPjCO23/p8IAl1YTM1KLtqArmgyvwNHgzFOyvj+ ZeWTuLP0B8IBJIzYZDX/PV9cFHwy2/kIyQVrPu81b1V3KFIJyl1dZXeRmsjo1Qju5FrZf6 eCqdMgPloKNPa6omexIuS7scZl3tsL0fPgE52pFzW6USrRnFU03plAHwpneFCx1TfOS4SE B1/wFimIK4n/s9aEYNNT65GE3jdcD1fPe5PRUpB2pFAm/O7rJOwnle+oMKRCYA== From: Stefan Schantl To: development@lists.ipfire.org Subject: [PATCH] pakfire.cgi: Implement logic to lock the page until pakfire has been fully launched. Date: Mon, 18 Oct 2021 21:09:58 +0200 Message-Id: <20211018190958.3752-1-stefan.schantl@ipfire.org> MIME-Version: 1.0 X-BeenThere: development@lists.ipfire.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: IPFire development talk List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: development-bounces@lists.ipfire.org Sender: "Development" When performing any action which requires pakfire, the page gets locked with an message informing the user that pakfire is working. The page will be reloaded when pakfire has been launched and is doing the requested operation - showing the well known log output. This also happens when pakfire has been launched via any kind of terminal or SSH session and the CGI gets accessed. Internally before pakfire gets started a variable called page_lock will be set to lock the page. An while loop will keep the page locked until pakfire is launched fully and has written it's lock_file. This approach will prevent us from any kind of required time intervall or race conditions. Signed-off-by: Stefan Schantl Reviewed-by: Bernhard Bitsch --- html/cgi-bin/pakfire.cgi | 49 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/html/cgi-bin/pakfire.cgi b/html/cgi-bin/pakfire.cgi index 0cf522ba1..f2381f031 100644 --- a/html/cgi-bin/pakfire.cgi +++ b/html/cgi-bin/pakfire.cgi @@ -44,6 +44,8 @@ $cgiparams{'VALID'} = ''; $cgiparams{'INSPAKS'} = ''; $cgiparams{'DELPAKS'} = ''; +my $page_lock; + sub refreshpage{&Header::openbox( 'Waiting', 1, "" );print "

$Lang::tr{'pagerefresh'}
";&Header::closebox();} &Header::getcgihash(\%cgiparams); @@ -57,8 +59,9 @@ sub refreshpage{&Header::openbox( 'Waiting', 1, " + + + $Lang::tr{ + + + + $Lang::tr{'pakfire working'} + + + +END + &Header::closebox(); + + # Infinite loop to lock the page until pakfire lockfile is present. + while($page_lock) { + unless (-e $Pakfire::lockfile) { + sleep(1); + } else { + # Release page lock. + undef($page_lock); + + # Break loop. + last; + } + } + + # Perform page reload. + print "\n"; + exit; +} + +# Check if pakfire is already running. In this case a lockfile is present. if (-e $Pakfire::lockfile) { &Header::openbox( 'Waiting', 1, "" ); print <