commit 3cf6c82633fb153663e7927e20818f355d949a89
parent d30a6e3d1f1cf035d018ec27145ef57c4ce41606
Author: Drew DeVault <sir@cmpwn.com>
Date: Sun, 26 May 2019 11:18:51 -0400
msgviewer: copy stderr into pager
This prevents a broken filter config from being a silent error
Diffstat:
1 file changed, 17 insertions(+), 1 deletion(-)
diff --git a/widgets/msgviewer.go b/widgets/msgviewer.go
@@ -386,15 +386,31 @@ func (pv *PartViewer) attemptCopy() {
header.SetText("Content-Description", pv.part.Description)
if pv.filter != nil {
stdout, _ := pv.filter.StdoutPipe()
+ stderr, _ := pv.filter.StderrPipe()
pv.filter.Start()
+ ch := make(chan interface{})
go func() {
_, err := io.Copy(pv.pagerin, stdout)
if err != nil {
pv.err = err
pv.Invalidate()
}
- pv.pagerin.Close()
stdout.Close()
+ ch <- nil
+ }()
+ go func() {
+ _, err := io.Copy(pv.pagerin, stderr)
+ if err != nil {
+ pv.err = err
+ pv.Invalidate()
+ }
+ stderr.Close()
+ ch <- nil
+ }()
+ go func() {
+ <-ch
+ <-ch
+ pv.pagerin.Close()
}()
}
go func() {