Thank you very much.

I merged this and hopefully this won’t break anything *fingers crossed*.

> On 24 May 2021, at 18:38, Stefan Schantl <stefan.schantl(a)ipfire.org> wrote:
> 
> When pakfire gets launched a check if a so called lockfile exists and
> the process will be aborted, otherwise the file will be created which
> prevents any other pakfire instance to perform any operations until the
> first process gets finished and the lock will be released again.
> 
> Because the release of the lock is located in an END block, the lock
> also will be released in case the pakfire process gets interuped or
> gains an error.
> 
> This prevents from an lock loop and an unuseable pakfire.
> 
> Reference: #12621.
> 
> Signed-off-by: Stefan Schantl <stefan.schantl(a)ipfire.org>
> ---
> src/pakfire/lib/functions.pl |  3 +++
> src/pakfire/pakfire          | 26 +++++++++++++++++++++++++-
> 2 files changed, 28 insertions(+), 1 deletion(-)
> 
> diff --git a/src/pakfire/lib/functions.pl b/src/pakfire/lib/functions.pl
> index 4d5c6219a..f9a19b60d 100644
> --- a/src/pakfire/lib/functions.pl
> +++ b/src/pakfire/lib/functions.pl
> @@ -73,6 +73,9 @@ my %pakfiresettings = ();
> # Make version
> $Conf::version = &make_version();
> 
> +# Pakfire lock file.
> +our $lockfile = "/tmp/pakfire_lock";
> +
> sub message {
> 	my $message = shift;
> 		
> diff --git a/src/pakfire/pakfire b/src/pakfire/pakfire
> index c69a8d3ad..4139d106b 100644
> --- a/src/pakfire/pakfire
> +++ b/src/pakfire/pakfire
> @@ -2,7 +2,7 @@
> ###############################################################################
> #                                                                             #
> # IPFire.org - A linux based firewall                                         #
> -# Copyright (C) 2007-2015   IPFire Team   <info(a)ipfire.org>                   #
> +# Copyright (C) 2007-2021   IPFire Team   <info(a)ipfire.org>                   #
> #                                                                             #
> # This program is free software: you can redistribute it and/or modify        #
> # it under the terms of the GNU General Public License as published by        #
> @@ -31,6 +31,7 @@
> 	
> 	my $interactive = 1;
> 	my $force = "noforce";
> +	my $locked;
> 	
> 	&Pakfire::logger("PAKFIRE INFO: IPFire Pakfire $Conf::version started!");
> 
> @@ -47,6 +48,21 @@
> 		&Pakfire::message("PAKFIRE ERROR: You need to be online to run pakfire!");
> 		exit 2;
> 	}
> +
> +	# Check if a lockfile already exists.
> +	if (-e "$Pakfire::lockfile") {
> +		&Pakfire::message("PAKFIRE ERROR: Another instance of pakfire is already running!");
> +		exit 1;
> +	}
> +
> +	# Write lockfile.
> +	open(LOCK, ">$Pakfire::lockfile");
> +
> +	# Pakfire has locked in this session set locket to "1".
> +	$locked = "1";
> +
> +	# Close filehandle.
> +	close(LOCK);
> 	
> 	### Check if we are started by another name
> 	#
> @@ -330,4 +346,12 @@
> 
> 	&Pakfire::logger("PAKFIRE INFO: Pakfire has finished. Closing.");
> 
> +	END {
> +		# Check if pakfire has been locked in this session.
> +		if ($locked) {
> +			# Remove lockfile.
> +			unlink($Pakfire::lockfile);
> +		}
> +	}
> +
> 	exit 0;
> -- 
> 2.20.1
>