Skip to content

Commit cfc5b9a

Browse files
author
Jacob953
committed
feat: restructure Control
1 parent dbd117a commit cfc5b9a

File tree

1 file changed

+14
-26
lines changed

1 file changed

+14
-26
lines changed

poll_uring.go

Lines changed: 14 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -89,50 +89,38 @@ func (p *uringPoll) Trigger() error {
8989

9090
// Control implements Poll.
9191
func (p *uringPoll) Control(operator *FDOperator, event PollEvent) (err error) {
92-
var ctlOp, pollOp Op
93-
var userData uint64
94-
var evt epollevent
95-
*(**FDOperator)(unsafe.Pointer(&evt.data)) = operator
92+
var pollOp Op
93+
var mask uint32
9694
switch event {
9795
case PollReadable:
9896
operator.inuse()
99-
evt.events = syscall.EPOLLIN | syscall.EPOLLRDHUP | syscall.EPOLLERR
100-
ctlOp = URingEpollCtl(uintptr(operator.FD), uintptr(p.uring.Fd()), syscall.EPOLL_CTL_ADD, unsafe.Pointer(&evt))
101-
pollOp = PollAdd(uintptr(operator.FD), evt.events)
97+
mask = syscall.EPOLLIN | syscall.EPOLLRDHUP | syscall.EPOLLERR
98+
pollOp = PollAdd(uintptr(operator.FD), mask)
10299
case PollModReadable:
103100
operator.inuse()
104-
evt.events = syscall.EPOLLIN | syscall.EPOLLRDHUP | syscall.EPOLLERR
105-
ctlOp = URingEpollCtl(uintptr(operator.FD), uintptr(p.uring.Fd()), syscall.EPOLL_CTL_MOD, unsafe.Pointer(&evt))
106-
pollOp = PollAdd(uintptr(operator.FD), evt.events)
101+
mask = syscall.EPOLLIN | syscall.EPOLLRDHUP | syscall.EPOLLERR
102+
pollOp = PollAdd(uintptr(operator.FD), mask)
107103
case PollDetach:
108-
evt.events = syscall.EPOLLIN | syscall.EPOLLOUT | syscall.EPOLLRDHUP | syscall.EPOLLERR
109-
ctlOp = URingEpollCtl(uintptr(operator.FD), uintptr(p.uring.Fd()), syscall.EPOLL_CTL_DEL, unsafe.Pointer(&evt))
110-
pollOp = PollAdd(uintptr(operator.FD), evt.events)
104+
pollOp = PollRemove(uint64(uintptr(unsafe.Pointer(operator))))
111105
case PollWritable:
112106
operator.inuse()
113-
evt.events = EPOLLET | syscall.EPOLLOUT | syscall.EPOLLRDHUP | syscall.EPOLLERR
114-
ctlOp = URingEpollCtl(uintptr(operator.FD), uintptr(p.uring.Fd()), syscall.EPOLL_CTL_ADD, unsafe.Pointer(&evt))
115-
pollOp = PollAdd(uintptr(operator.FD), evt.events)
107+
mask = EPOLLET | syscall.EPOLLOUT | syscall.EPOLLRDHUP | syscall.EPOLLERR
108+
pollOp = PollAdd(uintptr(operator.FD), mask)
116109
case PollR2RW:
117-
evt.events = syscall.EPOLLIN | syscall.EPOLLOUT | syscall.EPOLLRDHUP | syscall.EPOLLERR
118-
ctlOp = URingEpollCtl(uintptr(operator.FD), uintptr(p.uring.Fd()), syscall.EPOLL_CTL_MOD, unsafe.Pointer(&evt))
119-
pollOp = PollAdd(uintptr(operator.FD), evt.events)
110+
mask = syscall.EPOLLIN | syscall.EPOLLOUT | syscall.EPOLLRDHUP | syscall.EPOLLERR
111+
pollOp = PollAdd(uintptr(operator.FD), mask)
120112
case PollRW2R:
121-
evt.events = syscall.EPOLLIN | syscall.EPOLLRDHUP | syscall.EPOLLERR
122-
ctlOp = URingEpollCtl(uintptr(operator.FD), uintptr(p.uring.Fd()), syscall.EPOLL_CTL_MOD, unsafe.Pointer(&evt))
123-
pollOp = PollAdd(uintptr(operator.FD), evt.events)
113+
mask = syscall.EPOLLIN | syscall.EPOLLRDHUP | syscall.EPOLLERR
114+
pollOp = PollAdd(uintptr(operator.FD), mask)
124115
}
125116

117+
var userData uint64
126118
*(**FDOperator)(unsafe.Pointer(&userData)) = operator
127119

128120
err = p.uring.Queue(pollOp, 0, userData)
129121
if err != nil {
130122
panic(err)
131123
}
132-
err = p.uring.Queue(ctlOp, 0, userData)
133-
if err != nil {
134-
panic(err)
135-
}
136124

137125
_, err = p.uring.Submit()
138126
return err

0 commit comments

Comments
 (0)