waitEvent implements blocking wait on given events until one of the events have been reported.
(ctx context.Context, event waiter.EventMask)
| 816 | // waitEvent implements blocking wait on given events |
| 817 | // until one of the events have been reported. |
| 818 | func (s *socketOperations) waitEvent(ctx context.Context, event waiter.EventMask) error { |
| 819 | var err error |
| 820 | t := ctx.(*kernel.Task) |
| 821 | e, ch := waiter.NewChannelEntry(event | waiter.EventErr | waiter.EventHUp) |
| 822 | s.EventRegister(&e) |
| 823 | |
| 824 | // It's possible events happens between last check and EventRegister. |
| 825 | // If this happens and we don't check readiness again, we would miss |
| 826 | // the event and get blocked forever. |
| 827 | if s.Readiness(event|waiter.EventErr|waiter.EventHUp) == 0 { |
| 828 | err = t.Block(ch) |
| 829 | } |
| 830 | |
| 831 | s.EventUnregister(&e) |
| 832 | return err |
| 833 | } |
| 834 | |
| 835 | // waitEventT implements blocking wait on given events |
| 836 | // until one of the events have been reported or timeout based on given deadline. |
no test coverage detected