File tree Expand file tree Collapse file tree 1 file changed +11
-4
lines changed
src/aero_kernel/src/socket Expand file tree Collapse file tree 1 file changed +11
-4
lines changed Original file line number Diff line number Diff line change @@ -79,12 +79,19 @@ impl MessageQueue {
79
79
}
80
80
81
81
pub fn read ( & mut self , buffer : & mut [ u8 ] ) -> usize {
82
- if let Some ( message) = self . messages . pop_front ( ) {
82
+ if let Some ( message) = self . messages . front_mut ( ) {
83
83
let message_len = message. data . len ( ) ;
84
- assert ! ( buffer. len( ) >= message_len) ;
84
+ let size = core :: cmp :: min ( buffer. len ( ) , message_len) ;
85
85
86
- buffer[ ..message_len] . copy_from_slice ( message. data . as_slice ( ) ) ;
87
- message_len
86
+ buffer[ ..size] . copy_from_slice ( & message. data [ ..size] ) ;
87
+
88
+ if size < message_len {
89
+ message. data . drain ( ..size) ;
90
+ return size;
91
+ }
92
+
93
+ self . messages . pop_front ( ) ;
94
+ size
88
95
} else {
89
96
unreachable ! ( "MessageQueue::read() called when queue is empty" ) ;
90
97
}
You can’t perform that action at this time.
0 commit comments