@@ -309,7 +309,7 @@ impl ConcurrentParser for SpscParser {
309309 if let Ok ( msgs) = self . output_receiver . try_recv ( ) {
310310 return Some ( msgs) ;
311311 }
312- if self . shutdown . load ( Ordering :: Relaxed ) {
312+ if self . shutdown . load ( Ordering :: Acquire ) {
313313 return None ;
314314 }
315315 let ( lock, cvar) = & * self . has_data ;
@@ -1062,7 +1062,8 @@ impl AdaptiveBatchProcessor {
10621062 }
10631063 let n = self . throughput_count as f64 ;
10641064 let mean = self . throughput_sum / n;
1065- ( self . throughput_sum_sq / n) - ( mean * mean)
1065+ let variance = ( self . throughput_sum_sq / n) - ( mean * mean) ;
1066+ variance. max ( 0.0 )
10661067 }
10671068
10681069 #[ inline]
@@ -1714,11 +1715,17 @@ impl WorkStealingParser {
17141715 self . injector . push ( WorkUnit :: Owned ( data) ) ;
17151716 }
17161717
1717- pub fn submit_arc ( & self , data : Arc < [ u8 ] > , start : usize , end : usize ) {
1718+ pub fn submit_arc ( & self , data : Arc < [ u8 ] > , start : usize , end : usize ) -> Result < ( ) > {
17181719 if start >= end || end > data. len ( ) {
1719- return ;
1720+ return Err ( ParseError :: InvalidArgument ( format ! (
1721+ "invalid range {}..{} for data of length {}" ,
1722+ start,
1723+ end,
1724+ data. len( )
1725+ ) ) ) ;
17201726 }
17211727 self . injector . push ( WorkUnit :: ArcSlice ( data, start, end) ) ;
1728+ Ok ( ( ) )
17221729 }
17231730
17241731 pub fn submit_chunks ( & self , data : Arc < [ u8 ] > , chunk_size : usize ) -> usize {
0 commit comments