@@ -186,19 +186,19 @@ impl Driver {
186186 RawOp :: new ( user_data, op)
187187 }
188188
189- fn submit ( & mut self , user_data : usize , arg : WaitArg ) -> io:: Result < ( ) > {
189+ /// # Safety
190+ /// The input fd should be valid.
191+ unsafe fn submit ( & mut self , user_data : usize , arg : WaitArg ) -> io:: Result < ( ) > {
190192 let need_add = !self . registry . contains_key ( & arg. fd ) ;
191193 let queue = self . registry . entry ( arg. fd ) . or_default ( ) ;
192194 queue. push_back_interest ( user_data, arg. interest ) ;
193195 // We use fd as the key.
194196 let event = queue. event ( arg. fd as usize ) ;
195- unsafe {
196- if need_add {
197- self . poll . add ( arg. fd , event) ?;
198- } else {
199- let fd = BorrowedFd :: borrow_raw ( arg. fd ) ;
200- self . poll . modify ( fd, event) ?;
201- }
197+ if need_add {
198+ self . poll . add ( arg. fd , event) ?;
199+ } else {
200+ let fd = BorrowedFd :: borrow_raw ( arg. fd ) ;
201+ self . poll . modify ( fd, event) ?;
202202 }
203203 Ok ( ( ) )
204204 }
@@ -218,7 +218,10 @@ impl Driver {
218218 let op_pin = op. as_pin ( ) ;
219219 match op_pin. pre_submit ( ) {
220220 Ok ( Decision :: Wait ( arg) ) => {
221- self . submit ( user_data, arg) ?;
221+ // SAFETY: fd is from the OpCode.
222+ unsafe {
223+ self . submit ( user_data, arg) ?;
224+ }
222225 Poll :: Pending
223226 }
224227 Ok ( Decision :: Completed ( res) ) => Poll :: Ready ( Ok ( res) ) ,
0 commit comments