tags 867020 + confirmed patch pending
>>>>>  AB == Andreas Beckmann [2017-7-3]

AB> Package: auctex
AB> Version: 11.90-1
AB> Severity: serious
AB> User: debian...@lists.debian.org
AB> Usertags: piuparts

AB> Hi,

AB> during a test with piuparts I noticed your package fails to remove.

>> From the attached log (scroll to the bottom...):

AB> Removing auctex (11.90-1) ...
AB> Remove auctex for emacs25
AB> auctex/remove: Removing parsed (La)TeX macros for emacs25...rm: cannot 
remove '/var/lib/auctex/emacs25': Directory not empty
AB> ERROR: remove script from auctex package failed
AB> dpkg: error processing package auctex (--remove):
AB> subprocess installed pre-removal script returned error exit status 1

AB> This was observed during a test of stretch, i386, --install-recommends.

Hi Andreas,

thanks for the report; I can confirm it.

I think I found the cause.  At installation time the auctex package
starts in background (per default) the script udpate-auctex-elisp, which
keeps running for some time after installation writing files in
/var/lib/auctex/${emacsen-flavor} as part of its job.  During piuparts
tests the package gets removed before update-auctex-elisp has got the
chance to finish, so that when the package emacsen remove script invoke
the "rm --recursive --force /var/lib/auctex/emacs25" command
update-auctex-elisp still writes files in that directory.  Thus it may
happen, as far as I can undestand, that rm fails due to the non
atomicity of its non empty directory removal operations, because
update-auctex-elisp may create a new file after rm thinks it has removed
all of the directory files and before rm tries and removes the
directory, resulting in rm trying to unlink a non empty directory.

If my analysis is correct, this bug is unlikely to manifest itself
during normal operations, since it can only happen if auctex gets
removed shortly after its installation.

The solution I'm evaluating is to kill running update-auctex-elisp
instances before invoking "rm --recursive --force
/var/lib/auctex/${emacsen-flavor}" in auctex emacsen remove script.
Since "update-auctex-elisp" should be a rather distinct and private
process name, I think I will do it with something along the lines of
"pkill -f update-auctex-elisp", as in the patch attached.

>From 0dd8709b456afa76f1d73d79da3e02a48fd6cc27 Mon Sep 17 00:00:00 2001
From: "Davide G. M. Salvetti" <sa...@debian.org>
Date: Sat, 12 Aug 2017 00:46:05 +0200
Subject: [PATCH] Kill update-auctex-elisp instances at package remove time

* debian/auctex.emacsen-remove.eperl: When the package is being removed,
  take care of killing any running update-auctex-elisp instance before
  removing parsed macro caches in /var/lib/auctex/$FLAVOR.

* debian/control (auctex/Depends): Add procps, needed for pgrep and pkill
  used above.

Closes: #867020
 debian/auctex.emacsen-remove.eperl | 9 +++++++++
 debian/control                     | 2 +-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/debian/auctex.emacsen-remove.eperl b/debian/auctex.emacsen-remove.eperl
index 79bf23294..c4adebc3e 100644
--- a/debian/auctex.emacsen-remove.eperl
+++ b/debian/auctex.emacsen-remove.eperl
@@ -36,6 +36,15 @@ undo_install () {
 undo_update_auctex_elisp () {
+    <: # Take care of running update-auctex-elisp instances :>//
+    while pgrep -f update-auctex-elisp >/dev/null; do
+	echo -n "${PROGNAME}:" \
+	     "Killing $(pgrep -fc update-auctex-elisp) running" \
+	     "update-auctex-elisp instance(s)..."
+	pkill -f update-auctex-elisp || true
+	sleep 1
+	echo 'done.'
+    done
     echo -n "${PROGNAME}:" \
 	"Removing parsed (La)TeX macros for ${FLAVOR}..."
     rm --recursive --force /var/lib/auctex/${FLAVOR}
diff --git a/debian/control b/debian/control
index d2489bb4c..b052b11af 100644
--- a/debian/control
+++ b/debian/control
@@ -11,7 +11,7 @@ Vcs-Git: https://anonscm.debian.org/git/users/salve/auctex.git
 Package: auctex
 Architecture: all
-Depends: emacs25 | emacs24 | emacs-snapshot, emacsen-common (>= 2.0.8), preview-latex-style, ${misc:Depends}
+Depends: emacs25 | emacs24 | emacs-snapshot, emacsen-common (>= 2.0.8), preview-latex-style, procps, ${misc:Depends}
 Recommends: ghostscript, texlive-latex-recommended, xpdf | evince | evince-gtk | okular
 Suggests: catdvi, dvipng, lacheck
 Breaks: emacspeak (<= 17.0-1)

Reply via email to