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 >