[pacman-dev,v2] lock file may be left behind when a signal arrives while in cleanup

Message ID 20200812151748.1760219-1-lilydjwg@gmail.com
State Under Review
Headers show
Series [pacman-dev,v2] lock file may be left behind when a signal arrives while in cleanup | expand

Commit Message

lilydjwg Aug. 12, 2020, 3:17 p.m. UTC
When a SIGINT or SIGHUP arrives before alpm_unlock (in alpm_release) but
after remove_soft_interrupt_handler, the lock file will be left behind.

Signed-off-by: lilydjwg <lilydjwg@gmail.com>
---

Oops, here is an updated version that calls _alpm_handle_unlock
before remove_soft_interrupt_handler. It should be fine to call
_alpm_handle_unlock twice.

 src/pacman/pacman.c | 3 +++
 1 file changed, 3 insertions(+)

Comments

lilydjwg Dec. 2, 2020, 12:02 p.m. UTC | #1
Hi there,

Is there anything remaining I could do to get this merged? Yesterday we
had a dangling db.lck again when a member lost his connection to the
server while running devtools.

On Wed, Aug 12, 2020 at 11:17:49PM +0800, lilydjwg wrote:
> When a SIGINT or SIGHUP arrives before alpm_unlock (in alpm_release) but
> after remove_soft_interrupt_handler, the lock file will be left behind.
> 
> Signed-off-by: lilydjwg <lilydjwg@gmail.com>
> ---
> 
> Oops, here is an updated version that calls _alpm_handle_unlock
> before remove_soft_interrupt_handler. It should be fine to call
> _alpm_handle_unlock twice.
> 
>  src/pacman/pacman.c | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
> index fefd3fa4..8928ccc4 100644
> --- a/src/pacman/pacman.c
> +++ b/src/pacman/pacman.c
> @@ -287,6 +287,9 @@ static void setuseragent(void)
>   */
>  static void cleanup(int ret)
>  {
> +	if(config) {
> +		_alpm_handle_unlock(config->handle);
> +	}
>  	remove_soft_interrupt_handler();
>  	if(config) {
>  		/* free alpm library resources */
> -- 
> 2.28.0
Andrew Gregory Dec. 3, 2020, 3:29 a.m. UTC | #2
On 12/02/20 at 08:02pm, lilydjwg wrote:
> Hi there,
> 
> Is there anything remaining I could do to get this merged? Yesterday we
> had a dangling db.lck again when a member lost his connection to the
> server while running devtools.
> 
> On Wed, Aug 12, 2020 at 11:17:49PM +0800, lilydjwg wrote:
> > When a SIGINT or SIGHUP arrives before alpm_unlock (in alpm_release) but
> > after remove_soft_interrupt_handler, the lock file will be left behind.
> > 
> > Signed-off-by: lilydjwg <lilydjwg@gmail.com>
> > ---
> > 
> > Oops, here is an updated version that calls _alpm_handle_unlock
> > before remove_soft_interrupt_handler. It should be fine to call
> > _alpm_handle_unlock twice.
> > 
> >  src/pacman/pacman.c | 3 +++
> >  1 file changed, 3 insertions(+)
> > 
> > diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
> > index fefd3fa4..8928ccc4 100644
> > --- a/src/pacman/pacman.c
> > +++ b/src/pacman/pacman.c
> > @@ -287,6 +287,9 @@ static void setuseragent(void)
> >   */
> >  static void cleanup(int ret)
> >  {
> > +	if(config) {
> > +		_alpm_handle_unlock(config->handle);
> > +	}
> >  	remove_soft_interrupt_handler();
> >  	if(config) {
> >  		/* free alpm library resources */

_alpm_handle_unlock is a private function not exposed to front-ends.

Patch

diff --git a/src/pacman/pacman.c b/src/pacman/pacman.c
index fefd3fa4..8928ccc4 100644
--- a/src/pacman/pacman.c
+++ b/src/pacman/pacman.c
@@ -287,6 +287,9 @@  static void setuseragent(void)
  */
 static void cleanup(int ret)
 {
+	if(config) {
+		_alpm_handle_unlock(config->handle);
+	}
 	remove_soft_interrupt_handler();
 	if(config) {
 		/* free alpm library resources */