commit 46606276c3fe20fa81597cf87378e18f7baf88a7 from: Fazlul Shahriar via: Dan Cross date: Thu Nov 14 06:26:39 2019 UTC 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 commit - 436ff26c3688198de8e8e48121296eace0b5d119 commit + 46606276c3fe20fa81597cf87378e18f7baf88a7 blob - 0063a339627b3a61a23d67970a30e788cce77228 blob + 5110840f7e52e3395b5db5170b71510f80e05499 --- src/cmd/page/cache.c +++ 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); blob - 7935f694c7f43e10981e924926b15b95ffdfbc59 blob + 846895718caafaa40d16309961cc1b0884793743 --- src/cmd/page/ps.c +++ src/cmd/page/ps.c @@ -355,6 +355,7 @@ Keepreading: 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;