(mm-remove-part): Try to kill external displayers
authorSimon Josefsson <jas@extundo.com>
Wed, 27 Aug 2003 01:49:26 +0000 (01:49 +0000)
committerSimon Josefsson <jas@extundo.com>
Wed, 27 Aug 2003 01:49:26 +0000 (01:49 +0000)
cleanly first (if it refuses, C-g aborts loop and kill process
unconditionally).  Also make sure process is dead before we remove
the files it may be using.  Reported by David Coe
<davidc@debian.org>.

lisp/ChangeLog
lisp/mm-decode.el

index ca9b909..886e7b6 100644 (file)
@@ -1,3 +1,11 @@
+2003-08-27  Simon Josefsson  <jas@extundo.com>
+
+       * mm-decode.el (mm-remove-part): Try to kill external displayers
+       cleanly first (if it refuses, C-g aborts loop and kill process
+       unconditionally).  Also make sure process is dead before we remove
+       the files it may be using.  Reported by David Coe
+       <davidc@debian.org>.
+
 2003-08-27  Jesper Harder  <harder@ifa.au.dk>
 
        * gnus-cache.el (gnus-cache-generate-active): Fix bug in
index 19a99e4..78a1aef 100644 (file)
@@ -844,9 +844,17 @@ external if displayed external."
          (funcall object))
         ;; Externally displayed part.
         ((consp object)
+         (condition-case ()
+             (while (get-buffer-process (cdr object))
+               (interrupt-process (get-buffer-process (cdr object)))
+               (message "Waiting for external displayer to die...")
+               (sit-for 1))
+           (quit)
+           (error))
+         (ignore-errors (and (cdr object) (kill-buffer (cdr object))))
          (ignore-errors (delete-file (car object)))
-         (ignore-errors (delete-directory (file-name-directory (car object))))
-         (ignore-errors (and (cdr object) (kill-buffer (cdr object)))))
+         (ignore-errors (delete-directory (file-name-directory
+                                           (car object)))))
         ((bufferp object)
          (when (buffer-live-p object)
            (kill-buffer object)))))