diff options
author | OpenShift Merge Robot <openshift-merge-robot@users.noreply.github.com> | 2019-02-21 17:07:48 +0100 |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-02-21 17:07:48 +0100 |
commit | af922fb2c6baceb89cc8e4acd6d84a6474b32dda (patch) | |
tree | b986c985c9f30f52279c9e265ce67c25b20c0a0d /vendor/github.com/vbauerster/mpb/progress_posix.go | |
parent | 28d6eeb57a46b8df8960cff6bf6748c4611b61ef (diff) | |
parent | c069d117594d72159157aa48d0693d8571be45c5 (diff) | |
download | podman-af922fb2c6baceb89cc8e4acd6d84a6474b32dda.tar.gz podman-af922fb2c6baceb89cc8e4acd6d84a6474b32dda.tar.bz2 podman-af922fb2c6baceb89cc8e4acd6d84a6474b32dda.zip |
Merge pull request #2394 from vrothberg/vendor-image-v1.4
vendor containers/image v1.4
Diffstat (limited to 'vendor/github.com/vbauerster/mpb/progress_posix.go')
-rw-r--r-- | vendor/github.com/vbauerster/mpb/progress_posix.go | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/vendor/github.com/vbauerster/mpb/progress_posix.go b/vendor/github.com/vbauerster/mpb/progress_posix.go new file mode 100644 index 000000000..545245a42 --- /dev/null +++ b/vendor/github.com/vbauerster/mpb/progress_posix.go @@ -0,0 +1,70 @@ +// +build !windows + +package mpb + +import ( + "os" + "os/signal" + "syscall" + "time" +) + +func (p *Progress) serve(s *pState) { + + var ticker *time.Ticker + var refreshCh <-chan time.Time + var winch chan os.Signal + var resumeTimer *time.Timer + var resumeEvent <-chan time.Time + winchIdleDur := s.rr * 2 + + if s.manualRefreshCh == nil { + ticker = time.NewTicker(s.rr) + refreshCh = ticker.C + winch = make(chan os.Signal, 2) + signal.Notify(winch, syscall.SIGWINCH) + } else { + refreshCh = s.manualRefreshCh + } + + for { + select { + case op := <-p.operateState: + op(s) + case <-refreshCh: + if s.zeroWait { + if s.manualRefreshCh == nil { + signal.Stop(winch) + ticker.Stop() + } + if s.shutdownNotifier != nil { + close(s.shutdownNotifier) + } + close(p.done) + return + } + tw, err := s.cw.GetWidth() + if err != nil { + tw = s.width + } + s.render(tw) + case <-winch: + tw, err := s.cw.GetWidth() + if err != nil { + tw = s.width + } + s.render(tw - tw/8) + if resumeTimer != nil && resumeTimer.Reset(winchIdleDur) { + break + } + ticker.Stop() + resumeTimer = time.NewTimer(winchIdleDur) + resumeEvent = resumeTimer.C + case <-resumeEvent: + ticker = time.NewTicker(s.rr) + refreshCh = ticker.C + resumeEvent = nil + resumeTimer = nil + } + } +} |