Mercurial > emacs
changeset 38997:751bf57c84a1
(gs-load-image): Use sleep-for.
From David.Kastrup@neuroinformatik.ruhr-uni-bochum.de.
author | Gerd Moellmann <gerd@gnu.org> |
---|---|
date | Tue, 28 Aug 2001 14:42:56 +0000 |
parents | 75af792df610 |
children | a6072762f50d |
files | lisp/gs.el |
diffstat | 1 files changed, 38 insertions(+), 15 deletions(-) [+] |
line wrap: on
line diff
--- a/lisp/gs.el Tue Aug 28 14:42:38 2001 +0000 +++ b/lisp/gs.el Tue Aug 28 14:42:56 2001 +0000 @@ -153,21 +153,44 @@ (unwind-protect (let ((file (plist-get (cdr spec) :file)) gs - (timeout 10)) - ;; Wait while property gets freed from a previous ghostscript - ;; process - (while (and (not (zerop (length (x-window-property "GHOSTVIEW" - frame)))) - (not (zerop timeout))) - (sit-for 0 100 t) - (setq timeout (1- timeout))) - ;; No use waiting longer. We might want to try killing off - ;; stuck processes, but there is no point in doing so: either - ;; they are stuck for good, in which case the user would - ;; probably be responsible for that, and killing them off will - ;; make debugging harder, or they are not. In that case, they - ;; will cause incomplete displays. But the same will happen - ;; if they are killed, anyway. + (timeout 40)) + ;; Wait while property gets freed from a previous ghostscript process + ;; sit-for returns nil as soon as input starts being + ;; available, so if we want to give GhostScript a reasonable + ;; chance of starting up, we better use sleep-for. We let + ;; sleep-for wait only half the time because if input is + ;; available, it is more likely that we don't care that much + ;; about garbled redisplay and are in a hurry. + (while (and + ;; Wait while the property is not yet available + (not (zerop (length (x-window-property "GHOSTVIEW" + frame)))) + ;; The following was an alternative condition: wait + ;; while there is still a process running. The idea + ;; was to avoid contention between processes. Turned + ;; out even more sluggish. + ;; (get-buffer-process "*GS*") + (not (zerop timeout))) + (unless (sit-for 0 100 t) + (sleep-for 0 50)) + (setq timeout (1- timeout))) + + ;; No use waiting longer. We might want to try killing off + ;; stuck processes, but there is no point in doing so: either + ;; they are stuck for good, in which case the user would + ;; probably be responsible for that, and killing them off will + ;; make debugging harder, or they are not. In that case, they + ;; will cause incomplete displays. But the same will happen + ;; if they are killed, anyway. The whole is rather + ;; disconcerting, and fast scrolling through a dozen images + ;; will make Emacs freeze for a while. The alternatives are a) + ;; proper implementation not waiting at all but creating + ;; appropriate queues, or b) permanently bad display due to + ;; bad cached images. So remember that this + ;; is just a hack and if people don't like the behaviour, they + ;; will most likely like the easy alternatives even less. + ;; And at least the image cache will make the delay apparent + ;; just once. (gs-set-ghostview-window-prop frame spec img-width img-height) (gs-set-ghostview-colors-window-prop frame pixel-colors) (setenv "GHOSTVIEW" window-and-pixmap-id)