MCPcopy
hub / github.com/containers/toolbox / poll

Function poll

src/cmd/utils.go:396–445  ·  view source on GitHub ↗
(pollFn pollFunc, eventFD int32, fds ...int32)

Source from the content-addressed store, hash-verified

394}
395
396func poll(pollFn pollFunc, eventFD int32, fds ...int32) error {
397 if len(fds) == 0 {
398 panic("file descriptors not specified")
399 }
400
401 pollFDs := []unix.PollFd{
402 {
403 Fd: eventFD,
404 Events: unix.POLLIN,
405 Revents: 0,
406 },
407 }
408
409 for _, fd := range fds {
410 pollFD := unix.PollFd{Fd: fd, Events: unix.POLLIN, Revents: 0}
411 pollFDs = append(pollFDs, pollFD)
412 }
413
414 for {
415 if _, err := unix.Poll(pollFDs, -1); err != nil {
416 if errors.Is(err, unix.EINTR) {
417 logrus.Debugf("Failed to poll(2): %s: ignoring", err)
418 continue
419 }
420
421 return fmt.Errorf("poll(2) failed: %w", err)
422 }
423
424 var err error
425
426 if pollFDs[0].Revents&unix.POLLIN != 0 {
427 logrus.Debug("Returned from eventfd: POLLIN")
428 err = context.Canceled
429
430 for {
431 buffer := make([]byte, 8)
432 if n, err := unix.Read(int(eventFD), buffer); n != len(buffer) || err != nil {
433 break
434 }
435 }
436 } else if pollFDs[0].Revents&unix.POLLNVAL != 0 {
437 logrus.Debug("Returned from eventfd: POLLNVAL")
438 err = context.Canceled
439 }
440
441 if err := pollFn(err, pollFDs[1:]); !errors.Is(err, errContinue) {
442 return err
443 }
444 }
445}
446
447func resolveContainerAndImageNames(container, containerArg, distroCLI, imageCLI, releaseCLI string) (
448 string, string, string, error,

Callers 2

askForConfirmationAsyncFunction · 0.85
discardInputAsyncFunction · 0.85

Calls 1

IsMethod · 0.80

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…