tpage: fix hang for forward-only postscript files - plan9port - [fork] Plan 9 from user space
 (HTM) git clone git://src.adamsgaard.dk/plan9port
 (DIR) Log
 (DIR) Files
 (DIR) Refs
 (DIR) README
 (DIR) LICENSE
       ---
 (DIR) commit 46606276c3fe20fa81597cf87378e18f7baf88a7
 (DIR) parent 436ff26c3688198de8e8e48121296eace0b5d119
 (HTM) Author: Fazlul Shahriar <fshahriar@gmail.com>
       Date:   Thu, 14 Nov 2019 00:47:58 -0500
       
       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
       
       Diffstat:
         M src/cmd/page/cache.c                |       7 ++++++-
         M src/cmd/page/ps.c                   |       1 +
       
       2 files changed, 7 insertions(+), 1 deletion(-)
       ---
 (DIR) diff --git a/src/cmd/page/cache.c b/src/cmd/page/cache.c
       t@@ -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);
 (DIR) diff --git a/src/cmd/page/ps.c b/src/cmd/page/ps.c
       t@@ -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;