@@ -186,18 +186,21 @@ impl SCNetworkReachability {
186
186
/// See [`SCNetworkReachabilityScheduleFromRunLoop`] for details.
187
187
///
188
188
/// [`SCNetworkReachabilityScheduleFromRunLoop`]: https://developer.apple.com/documentation/systemconfiguration/1514894-scnetworkreachabilityschedulewit?language=objc
189
- pub fn schedule_with_runloop (
189
+ ///
190
+ /// # Safety
191
+ ///
192
+ /// The `run_loop_mode` must not be NULL and must be a pointer to a valid run loop mode.
193
+ /// Use `core_foundation::runloop::kCFRunLoopCommonModes` if you are unsure.
194
+ pub unsafe fn schedule_with_runloop (
190
195
& self ,
191
196
run_loop : & CFRunLoop ,
192
197
run_loop_mode : CFStringRef ,
193
198
) -> Result < ( ) , SchedulingError > {
194
- if unsafe {
195
- SCNetworkReachabilityScheduleWithRunLoop (
196
- self . 0 ,
197
- run_loop. to_void ( ) as * mut _ ,
198
- run_loop_mode,
199
- )
200
- } == 0u8
199
+ if SCNetworkReachabilityScheduleWithRunLoop (
200
+ self . 0 ,
201
+ run_loop. to_void ( ) as * mut _ ,
202
+ run_loop_mode,
203
+ ) == 0u8
201
204
{
202
205
Err ( SchedulingError ( ( ) ) )
203
206
} else {
@@ -210,18 +213,21 @@ impl SCNetworkReachability {
210
213
/// See [`SCNetworkReachabilityUnscheduleFromRunLoop`] for details.
211
214
///
212
215
/// [`SCNetworkReachabilityUnscheduleFromRunLoop`]: https://developer.apple.com/documentation/systemconfiguration/1514899-scnetworkreachabilityunschedulef?language=objc
213
- pub fn unschedule_from_runloop (
216
+ ///
217
+ /// # Safety
218
+ ///
219
+ /// The `run_loop_mode` must not be NULL and must be a pointer to a valid run loop mode.
220
+ /// Use `core_foundation::runloop::kCFRunLoopCommonModes` if you are unsure.
221
+ pub unsafe fn unschedule_from_runloop (
214
222
& self ,
215
223
run_loop : & CFRunLoop ,
216
224
run_loop_mode : CFStringRef ,
217
225
) -> Result < ( ) , UnschedulingError > {
218
- if unsafe {
219
- SCNetworkReachabilityUnscheduleFromRunLoop (
220
- self . 0 ,
221
- run_loop. to_void ( ) as * mut _ ,
222
- run_loop_mode,
223
- )
224
- } == 0u8
226
+ if SCNetworkReachabilityUnscheduleFromRunLoop (
227
+ self . 0 ,
228
+ run_loop. to_void ( ) as * mut _ ,
229
+ run_loop_mode,
230
+ ) == 0u8
225
231
{
226
232
Err ( UnschedulingError ( ( ) ) )
227
233
} else {
@@ -383,14 +389,15 @@ mod test {
383
389
addr
384
390
) ;
385
391
reachability. set_callback ( |_| { } ) . unwrap ( ) ;
386
- reachability
387
- . schedule_with_runloop ( & CFRunLoop :: get_current ( ) , unsafe { kCFRunLoopCommonModes } )
388
- . unwrap ( ) ;
389
- reachability
390
- . unschedule_from_runloop ( & CFRunLoop :: get_current ( ) , unsafe {
391
- kCFRunLoopCommonModes
392
- } )
393
- . unwrap ( ) ;
392
+ // SAFETY: We use the Apple provided run_loop_mode kCFRunLoopCommonModes
393
+ unsafe {
394
+ reachability
395
+ . schedule_with_runloop ( & CFRunLoop :: get_current ( ) , kCFRunLoopCommonModes)
396
+ . unwrap ( ) ;
397
+ reachability
398
+ . unschedule_from_runloop ( & CFRunLoop :: get_current ( ) , kCFRunLoopCommonModes)
399
+ . unwrap ( ) ;
400
+ }
394
401
}
395
402
}
396
403
@@ -414,14 +421,15 @@ mod test {
414
421
remote
415
422
) ;
416
423
reachability. set_callback ( |_| { } ) . unwrap ( ) ;
417
- reachability
418
- . schedule_with_runloop ( & CFRunLoop :: get_current ( ) , unsafe { kCFRunLoopCommonModes } )
419
- . unwrap ( ) ;
420
- reachability
421
- . unschedule_from_runloop ( & CFRunLoop :: get_current ( ) , unsafe {
422
- kCFRunLoopCommonModes
423
- } )
424
- . unwrap ( ) ;
424
+ // SAFETY: We use the Apple provided run_loop_mode kCFRunLoopCommonModes
425
+ unsafe {
426
+ reachability
427
+ . schedule_with_runloop ( & CFRunLoop :: get_current ( ) , kCFRunLoopCommonModes)
428
+ . unwrap ( ) ;
429
+ reachability
430
+ . unschedule_from_runloop ( & CFRunLoop :: get_current ( ) , kCFRunLoopCommonModes)
431
+ . unwrap ( ) ;
432
+ }
425
433
}
426
434
}
427
435
@@ -435,16 +443,18 @@ mod test {
435
443
match SCNetworkReachability :: from_host ( & input) {
436
444
Some ( mut reachability) => {
437
445
reachability. set_callback ( |_| { } ) . unwrap ( ) ;
438
- reachability
439
- . schedule_with_runloop ( & CFRunLoop :: get_current ( ) , unsafe {
440
- kCFRunLoopCommonModes
441
- } )
442
- . unwrap ( ) ;
443
- reachability
444
- . unschedule_from_runloop ( & CFRunLoop :: get_current ( ) , unsafe {
445
- kCFRunLoopCommonModes
446
- } )
447
- . unwrap ( ) ;
446
+ // SAFETY: We use the Apple provided run_loop_mode kCFRunLoopCommonModes
447
+ unsafe {
448
+ reachability
449
+ . schedule_with_runloop ( & CFRunLoop :: get_current ( ) , kCFRunLoopCommonModes)
450
+ . unwrap ( ) ;
451
+ reachability
452
+ . unschedule_from_runloop (
453
+ & CFRunLoop :: get_current ( ) ,
454
+ kCFRunLoopCommonModes,
455
+ )
456
+ . unwrap ( ) ;
457
+ }
448
458
}
449
459
None => {
450
460
panic ! (
@@ -471,9 +481,12 @@ mod test {
471
481
let mut reachability =
472
482
SCNetworkReachability :: from ( "0.0.0.0:0" . parse :: < SocketAddr > ( ) . unwrap ( ) ) ;
473
483
reachability. set_callback ( |_| { } ) . unwrap ( ) ;
474
- reachability
475
- . schedule_with_runloop ( & CFRunLoop :: get_current ( ) , unsafe { kCFRunLoopCommonModes } )
476
- . unwrap ( ) ;
484
+ // SAFETY: We use the Apple provided run_loop_mode kCFRunLoopCommonModes
485
+ unsafe {
486
+ reachability
487
+ . schedule_with_runloop ( & CFRunLoop :: get_current ( ) , kCFRunLoopCommonModes)
488
+ . unwrap ( ) ;
489
+ }
477
490
reachability. set_callback ( |_| { } ) . unwrap ( ) ;
478
491
let _ = tx. send ( reachability) ;
479
492
CFRunLoop :: run_current ( ) ;
0 commit comments