From 2968c8004590ff6e233f6e3b102b99cee2ec6936 Mon Sep 17 00:00:00 2001
From: Rob Browning <rlb@defaultvalue.org>
Date: Mon, 10 Oct 2016 17:35:56 -0500
Subject: Kill gpg agent in package-test.el to avoid a race

package-test.el should no longer fail during clean up.

* Previously a delete-directories call raced with the gpg agent's own
  cleanup process (presumably triggered by the first deletion of one of
  the agent's sockets).  As a result, it looks like the agent might
  delete one of its sockets after delete-directories had decided to
  delete the socket, but before it made the attempt, causing an
  exception.

* To fix the problem, explicitly ask gpg-connect-agent to kill the agent
  before attempting to delete the gnupg home directory, and then delete
  via "rm -rf" to ignore any vanishing files.
---
 test/lisp/emacs-lisp/package-tests.el | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/test/lisp/emacs-lisp/package-tests.el b/test/lisp/emacs-lisp/package-tests.el
index f13ac3fa8d8..decced03cdf 100644
--- a/test/lisp/emacs-lisp/package-tests.el
+++ b/test/lisp/emacs-lisp/package-tests.el
@@ -161,6 +161,14 @@ with-package-test
                (delete-file
                 (expand-file-name f package-test-archive-upload-base))))
            (delete-directory package-test-archive-upload-base))
+         (call-process "gpg-connect-agent" nil nil nil
+                       "--homedir" (concat package-test-user-dir "/gnupg")
+                       "--no-autostart"
+                       "killagent" "/bye")
+         ;; Call "rm -rf" instead of delete-directory so that it won't
+         ;; choke if the gpg-agent sockets disappear during the
+         ;; recursive traversal.
+         (call-process "rm" nil nil nil "-r" package-test-user-dir)
 
          (when (and (boundp 'package-test-archive-upload-base)
                     (file-directory-p package-test-archive-upload-base))
