diff --git a/helper/stub.go b/helper/stub.go index 852930f..c1f97e6 100644 --- a/helper/stub.go +++ b/helper/stub.go @@ -68,39 +68,35 @@ func genericStub(argsFile, statFile *os.File) { } } - // simulate status pipe behaviour if statFile != nil { + // simulate status pipe behaviour + var epoll int + if fd, err := syscall.EpollCreate1(0); err != nil { + panic("cannot open epoll fd: " + err.Error()) + } else { + defer func() { + if err = syscall.Close(fd); err != nil { + panic("cannot close epoll fd: " + err.Error()) + } + }() + epoll = fd + } + if err := syscall.EpollCtl(epoll, syscall.EPOLL_CTL_ADD, int(statFile.Fd()), &syscall.EpollEvent{}); err != nil { + panic("cannot add status pipe to epoll: " + err.Error()) + } + if _, err := statFile.Write([]byte{'x'}); err != nil { panic("cannot write to status pipe: " + err.Error()) } - done := make(chan struct{}) - go func() { - // wait for status pipe close - var epoll int - if fd, err := syscall.EpollCreate1(0); err != nil { - panic("cannot open epoll fd: " + err.Error()) - } else { - defer func() { - if err = syscall.Close(fd); err != nil { - panic("cannot close epoll fd: " + err.Error()) - } - }() - epoll = fd - } - if err := syscall.EpollCtl(epoll, syscall.EPOLL_CTL_ADD, int(statFile.Fd()), &syscall.EpollEvent{}); err != nil { - panic("cannot add status pipe to epoll: " + err.Error()) - } - events := make([]syscall.EpollEvent, 1) - if _, err := syscall.EpollWait(epoll, events, -1); err != nil { - panic("cannot poll status pipe: " + err.Error()) - } - if events[0].Events != syscall.EPOLLERR { - panic(strconv.Itoa(int(events[0].Events))) + // wait for status pipe close + events := make([]syscall.EpollEvent, 1) + if _, err := syscall.EpollWait(epoll, events, -1); err != nil { + panic("cannot poll status pipe: " + err.Error()) + } + if events[0].Events != syscall.EPOLLERR { + panic(strconv.Itoa(int(events[0].Events))) - } - close(done) - }() - <-done + } } }