From 46606276c3fe20fa81597cf87378e18f7baf88a7 Mon Sep 17 00:00:00 2001 From: Fazlul Shahriar Date: Thu, 14 Nov 2019 00:47:58 -0500 Subject: [PATCH] page: fix hang for forward-only postscript files Page was hanging because ghostscript never closes the fd from which we're reading BMP data. We close our end of the pipe so that ghostscript will close its end. Tested with ghostscript version 9.50. Fixes #124 --- src/cmd/page/cache.c | 7 ++++++- src/cmd/page/ps.c | 1 + 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/cmd/page/cache.c b/src/cmd/page/cache.c index 0063a3396..5110840f7 100644 --- a/src/cmd/page/cache.c +++ b/src/cmd/page/cache.c @@ -168,7 +168,12 @@ raproc(void *a) c = a; lockdisplay(display); - _cachedpage(c->doc, c->angle, c->page, "-ra"); + /* + * If there is only one page in a fwdonly file, we may reach EOF + * while doing readahead and page will exit without showing anything. + */ + if(!c->doc->fwdonly) + _cachedpage(c->doc, c->angle, c->page, "-ra"); rabusy = 0; unlockdisplay(display); free(c); diff --git a/src/cmd/page/ps.c b/src/cmd/page/ps.c index 7935f694c..846895718 100644 --- a/src/cmd/page/ps.c +++ b/src/cmd/page/ps.c @@ -355,6 +355,7 @@ initps(Biobuf *b, int argc, char **argv, uchar *buf, int nbuf) if(dumb) { fprint(ps->gs.gsfd, "(%s) run PAGEFLUSH\n", argv[0]); fprint(ps->gs.gsfd, "(/dev/fd/3) (w) file dup (THIS IS NOT A PLAN9 BITMAP 01234567890123456789012345678901234567890123456789\\n) writestring flushfile\n"); + close(ps->gs.gsfd); } ps->bbox = bbox;