Wait implements Poll.
()
| 88 | |
| 89 | // Wait implements Poll. |
| 90 | func (p *defaultPoll) Wait() (err error) { |
| 91 | // init |
| 92 | caps, msec, n := barriercap, -1, 0 |
| 93 | p.Reset(128, caps) |
| 94 | // wait |
| 95 | for { |
| 96 | if n == p.size && p.size < 128*1024 { |
| 97 | p.Reset(p.size<<1, caps) |
| 98 | } |
| 99 | n, err = EpollWait(p.fd, p.events, msec) |
| 100 | if err != nil && err != syscall.EINTR { |
| 101 | return err |
| 102 | } |
| 103 | if n <= 0 { |
| 104 | msec = -1 |
| 105 | runtime.Gosched() |
| 106 | continue |
| 107 | } |
| 108 | msec = 0 |
| 109 | if p.Handler(p.events[:n]) { |
| 110 | return nil |
| 111 | } |
| 112 | // we can make sure that there is no op remaining if Handler finished |
| 113 | p.opcache.free() |
| 114 | } |
| 115 | } |
| 116 | |
| 117 | func (p *defaultPoll) handler(events []epollevent) (closed bool) { |
| 118 | var triggerRead, triggerWrite, triggerHup, triggerError bool |