@@ -80,6 +80,18 @@ impl<'a> AioCb<'a> {
80
80
self . inner . cancel ( )
81
81
} // LCOV_EXCL_LINE
82
82
83
+ fn _deregister_raw ( & mut self ) {
84
+ let sigev = SigevNotify :: SigevNone ;
85
+ self . inner . set_sigev_notify ( sigev) ;
86
+ }
87
+
88
+ /// Extra registration method needed by Tokio
89
+ #[ cfg( feature = "tokio" ) ]
90
+ #[ cfg_attr( docsrs, doc( cfg( feature = "tokio" ) ) ) ]
91
+ pub fn deregister_raw ( & mut self ) {
92
+ self . _deregister_raw ( )
93
+ }
94
+
83
95
/// Retrieve the status of an in-progress or complete operation.
84
96
///
85
97
/// Not usually needed, since `mio_aio` always uses kqueue for notification.
@@ -97,6 +109,18 @@ impl<'a> AioCb<'a> {
97
109
self . inner . read ( )
98
110
} // LCOV_EXCL_LINE
99
111
112
+ fn _register_raw ( & mut self , kq : RawFd , udata : usize ) {
113
+ let sigev = SigevNotify :: SigevKevent { kq, udata : udata as isize } ;
114
+ self . inner . set_sigev_notify ( sigev) ;
115
+ }
116
+
117
+ /// Extra registration method needed by Tokio
118
+ #[ cfg( feature = "tokio" ) ]
119
+ #[ cfg_attr( docsrs, doc( cfg( feature = "tokio" ) ) ) ]
120
+ pub fn register_raw ( & mut self , kq : RawFd , udata : usize ) {
121
+ self . _register_raw ( kq, udata)
122
+ }
123
+
100
124
/// Asynchronously write to a file.
101
125
pub fn write ( & mut self ) -> nix:: Result < ( ) > {
102
126
self . inner . write ( )
@@ -113,8 +137,7 @@ impl<'a> Source for AioCb<'a> {
113
137
assert ! ( interests. is_aio( ) ) ;
114
138
let udata = usize:: from ( token) ;
115
139
let kq = registry. as_raw_fd ( ) ;
116
- let sigev = SigevNotify :: SigevKevent { kq, udata : udata as isize } ;
117
- self . inner . set_sigev_notify ( sigev) ;
140
+ self . _register_raw ( kq, udata) ;
118
141
Ok ( ( ) )
119
142
}
120
143
@@ -128,8 +151,7 @@ impl<'a> Source for AioCb<'a> {
128
151
}
129
152
130
153
fn deregister ( & mut self , _registry : & Registry ) -> io:: Result < ( ) > {
131
- let sigev = SigevNotify :: SigevNone ;
132
- self . inner . set_sigev_notify ( sigev) ;
154
+ self . _deregister_raw ( ) ;
133
155
Ok ( ( ) )
134
156
}
135
157
}
@@ -146,6 +168,18 @@ pub struct LioCb<'a> {
146
168
// LCOV_EXCL_STOP
147
169
148
170
impl < ' a > LioCb < ' a > {
171
+ fn _deregister_raw ( & mut self ) {
172
+ let sigev = SigevNotify :: SigevNone ;
173
+ self . sev = sigev;
174
+ }
175
+
176
+ /// Extra registration method needed by Tokio
177
+ #[ cfg( feature = "tokio" ) ]
178
+ #[ cfg_attr( docsrs, doc( cfg( feature = "tokio" ) ) ) ]
179
+ pub fn deregister_raw ( & mut self ) {
180
+ self . _deregister_raw ( )
181
+ }
182
+
149
183
/// Translate the operating system's somewhat unhelpful error from
150
184
/// `lio_listio` into something more useful.
151
185
fn fix_submit_error ( & mut self , e : nix:: Result < ( ) > ) -> Result < ( ) , LioError > {
@@ -203,6 +237,18 @@ impl<'a> LioCb<'a> {
203
237
}
204
238
}
205
239
240
+ fn _register_raw ( & mut self , kq : RawFd , udata : usize ) {
241
+ let sigev = SigevNotify :: SigevKevent { kq, udata : udata as isize } ;
242
+ self . sev = sigev;
243
+ }
244
+
245
+ /// Extra registration method needed by Tokio
246
+ #[ cfg( feature = "tokio" ) ]
247
+ #[ cfg_attr( docsrs, doc( cfg( feature = "tokio" ) ) ) ]
248
+ pub fn register_raw ( & mut self , kq : RawFd , udata : usize ) {
249
+ self . _register_raw ( kq, udata)
250
+ }
251
+
206
252
/// Submit an `LioCb` to the `aio(4)` subsystem.
207
253
///
208
254
/// If the return value is [`LioError::EAGAIN`], then no operations were
@@ -264,8 +310,7 @@ impl<'a> Source for LioCb<'a> {
264
310
assert ! ( interests. is_lio( ) ) ;
265
311
let udata = usize:: from ( token) ;
266
312
let kq = registry. as_raw_fd ( ) ;
267
- let sigev = SigevNotify :: SigevKevent { kq, udata : udata as isize } ;
268
- self . sev = sigev;
313
+ self . _register_raw ( kq, udata) ;
269
314
Ok ( ( ) )
270
315
}
271
316
@@ -279,8 +324,7 @@ impl<'a> Source for LioCb<'a> {
279
324
}
280
325
281
326
fn deregister ( & mut self , _registry : & Registry ) -> io:: Result < ( ) > {
282
- let sigev = SigevNotify :: SigevNone ;
283
- self . sev = sigev;
327
+ self . _deregister_raw ( ) ;
284
328
Ok ( ( ) )
285
329
}
286
330
}
0 commit comments