@@ -449,7 +449,11 @@ impl MessageReader {
449
449
}
450
450
451
451
/// Called when we receive an IO Completion Packet for this handle.
452
- fn notify_completion ( & mut self , err : u32 ) -> Result < ( ) , WinError > {
452
+ ///
453
+ /// Unsafe, since as far as I can tell, the soundness of this method
454
+ /// relies on the validity of the `self` object (specifically, `self.ov`)
455
+ /// passed in by the caller.
456
+ unsafe fn notify_completion ( & mut self , err : u32 ) -> Result < ( ) , WinError > {
453
457
win32_trace ! ( "[$ {:?}] notify_completion" , self . handle) ;
454
458
455
459
// mark a read as no longer in progress even before we check errors
@@ -472,13 +476,11 @@ impl MessageReader {
472
476
panic ! ( "[$ {:?}] *** notify_completion: unhandled error reported! {}" , self . handle, err) ;
473
477
}
474
478
475
- unsafe {
476
- let new_size = self . read_buf . len ( ) + nbytes as usize ;
477
- win32_trace ! ( "nbytes: {}, offset {}, buf len {}->{}, capacity {}" ,
478
- nbytes, offset, self . read_buf. len( ) , new_size, self . read_buf. capacity( ) ) ;
479
- assert ! ( new_size <= self . read_buf. capacity( ) ) ;
480
- self . read_buf . set_len ( new_size) ;
481
- }
479
+ let new_size = self . read_buf . len ( ) + nbytes as usize ;
480
+ win32_trace ! ( "nbytes: {}, offset {}, buf len {}->{}, capacity {}" ,
481
+ nbytes, offset, self . read_buf. len( ) , new_size, self . read_buf. capacity( ) ) ;
482
+ assert ! ( new_size <= self . read_buf. capacity( ) ) ;
483
+ self . read_buf . set_len ( new_size) ;
482
484
483
485
Ok ( ( ) )
484
486
}
@@ -1213,7 +1215,7 @@ impl OsIpcReceiverSet {
1213
1215
win32_trace ! ( "[# {:?}] result for receiver {:?}" , * self . iocp, * reader. handle) ;
1214
1216
1215
1217
// tell it about the completed IO op
1216
- try!( reader. notify_completion ( io_err) ) ;
1218
+ unsafe { try!( reader. notify_completion ( io_err) ) ; }
1217
1219
1218
1220
// then drain as many messages as we can
1219
1221
loop {
0 commit comments