Codebase list golang-github-vbauerster-mpb / 546a017
Don't use syscall.SIGWINCH for windows builds Vladimir Bauer 8 years ago
3 changed file(s) with 134 addition(s) and 71 deletion(s). Raw diff Collapse all Expand all
00 package mpb
11
22 import (
3 "fmt"
43 "io"
54 "os"
6 "os/signal"
7 "runtime"
85 "sync"
9 "syscall"
106 "time"
117
128 "github.com/vbauerster/mpb/cwriter"
171167 case <-p.quit:
172168 default:
173169 close(p.quit)
174 }
175 }
176
177 // server monitors underlying channels and renders any progress bars
178 func (p *Progress) server(conf pConf) {
179 winch := make(chan os.Signal, 1)
180 signal.Notify(winch, syscall.SIGWINCH)
181
182 defer func() {
183 if conf.shutdownNotifier != nil {
184 close(conf.shutdownNotifier)
185 }
186 signal.Stop(winch)
187 close(p.done)
188 }()
189
190 numP, numA := -1, -1
191
192 var timer *time.Timer
193 var resumeTicker <-chan time.Time
194 resumeDelay := 300 * time.Millisecond
195
196 for {
197 select {
198 case op := <-p.ops:
199 op(&conf)
200 case <-conf.ticker.C:
201 if len(conf.bars) == 0 {
202 runtime.Gosched()
203 break
204 }
205 b0 := conf.bars[0]
206 if numP == -1 {
207 numP = b0.NumOfPrependers()
208 }
209 if numA == -1 {
210 numA = b0.NumOfAppenders()
211 }
212 tw, _, _ := cwriter.TermSize()
213 err := conf.writeAndFlush(tw, numP, numA)
214 if err != nil {
215 fmt.Fprintln(os.Stderr, err)
216 }
217 case <-winch:
218 tw, _, _ := cwriter.TermSize()
219 err := conf.writeAndFlush(tw-tw/8, numP, numA)
220 if err != nil {
221 fmt.Fprintln(os.Stderr, err)
222 }
223 if timer != nil && timer.Reset(resumeDelay) {
224 break
225 }
226 conf.ticker.Stop()
227 timer = time.NewTimer(resumeDelay)
228 resumeTicker = timer.C
229 case <-resumeTicker:
230 conf.ticker = time.NewTicker(conf.rr)
231 resumeTicker = nil
232 case <-conf.cancel:
233 conf.ticker.Stop()
234 conf.cancel = nil
235 case <-p.quit:
236 if conf.cancel != nil {
237 conf.ticker.Stop()
238 }
239 return
240 }
241170 }
242171 }
243172
0 // +build !windows
1
2 package mpb
3
4 import (
5 "fmt"
6 "os"
7 "os/signal"
8 "runtime"
9 "syscall"
10 "time"
11
12 "github.com/vbauerster/mpb/cwriter"
13 )
14
15 func (p *Progress) server(conf pConf) {
16 winch := make(chan os.Signal, 1)
17 signal.Notify(winch, syscall.SIGWINCH)
18
19 defer func() {
20 if conf.shutdownNotifier != nil {
21 close(conf.shutdownNotifier)
22 }
23 signal.Stop(winch)
24 close(p.done)
25 }()
26
27 numP, numA := -1, -1
28
29 var timer *time.Timer
30 var resumeTicker <-chan time.Time
31 resumeDelay := 300 * time.Millisecond
32
33 for {
34 select {
35 case op := <-p.ops:
36 op(&conf)
37 case <-conf.ticker.C:
38 if len(conf.bars) == 0 {
39 runtime.Gosched()
40 break
41 }
42 b0 := conf.bars[0]
43 if numP == -1 {
44 numP = b0.NumOfPrependers()
45 }
46 if numA == -1 {
47 numA = b0.NumOfAppenders()
48 }
49 tw, _, _ := cwriter.TermSize()
50 err := conf.writeAndFlush(tw, numP, numA)
51 if err != nil {
52 fmt.Fprintln(os.Stderr, err)
53 }
54 case <-winch:
55 tw, _, _ := cwriter.TermSize()
56 err := conf.writeAndFlush(tw-tw/8, numP, numA)
57 if err != nil {
58 fmt.Fprintln(os.Stderr, err)
59 }
60 if timer != nil && timer.Reset(resumeDelay) {
61 break
62 }
63 conf.ticker.Stop()
64 timer = time.NewTimer(resumeDelay)
65 resumeTicker = timer.C
66 case <-resumeTicker:
67 conf.ticker = time.NewTicker(conf.rr)
68 resumeTicker = nil
69 case <-conf.cancel:
70 conf.ticker.Stop()
71 conf.cancel = nil
72 case <-p.quit:
73 if conf.cancel != nil {
74 conf.ticker.Stop()
75 }
76 return
77 }
78 }
79 }
0 // +build windows
1
2 package mpb
3
4 import (
5 "fmt"
6 "os"
7 "runtime"
8
9 "github.com/vbauerster/mpb/cwriter"
10 )
11
12 func (p *Progress) server(conf pConf) {
13 defer func() {
14 if conf.shutdownNotifier != nil {
15 close(conf.shutdownNotifier)
16 }
17 close(p.done)
18 }()
19
20 numP, numA := -1, -1
21
22 for {
23 select {
24 case op := <-p.ops:
25 op(&conf)
26 case <-conf.ticker.C:
27 if len(conf.bars) == 0 {
28 runtime.Gosched()
29 break
30 }
31 b0 := conf.bars[0]
32 if numP == -1 {
33 numP = b0.NumOfPrependers()
34 }
35 if numA == -1 {
36 numA = b0.NumOfAppenders()
37 }
38 tw, _, _ := cwriter.TermSize()
39 err := conf.writeAndFlush(tw, numP, numA)
40 if err != nil {
41 fmt.Fprintln(os.Stderr, err)
42 }
43 case <-conf.cancel:
44 conf.ticker.Stop()
45 conf.cancel = nil
46 case <-p.quit:
47 if conf.cancel != nil {
48 conf.ticker.Stop()
49 }
50 return
51 }
52 }
53 }