@@ -89,50 +89,38 @@ func (p *uringPoll) Trigger() error {
89
89
90
90
// Control implements Poll.
91
91
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
96
94
switch event {
97
95
case PollReadable :
98
96
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 )
102
99
case PollModReadable :
103
100
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 )
107
103
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 ))))
111
105
case PollWritable :
112
106
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 )
116
109
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 )
120
112
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 )
124
115
}
125
116
117
+ var userData uint64
126
118
* (* * FDOperator )(unsafe .Pointer (& userData )) = operator
127
119
128
120
err = p .uring .Queue (pollOp , 0 , userData )
129
121
if err != nil {
130
122
panic (err )
131
123
}
132
- err = p .uring .Queue (ctlOp , 0 , userData )
133
- if err != nil {
134
- panic (err )
135
- }
136
124
137
125
_ , err = p .uring .Submit ()
138
126
return err
0 commit comments