prevent infinite loop on window wraparound
This commit is contained in:
		@@ -395,21 +395,19 @@ fn process_blob(
 | 
				
			|||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // push all contiguous blobs into consumed queue, increment consumed
 | 
					    // push all contiguous blobs into consumed queue, increment consumed
 | 
				
			||||||
    loop {
 | 
					    while *consumed < received {
 | 
				
			||||||
        let k = (*consumed % WINDOW_SIZE) as usize;
 | 
					        let k = (*consumed % WINDOW_SIZE) as usize;
 | 
				
			||||||
        trace!("k: {} consumed: {}", k, *consumed);
 | 
					        trace!("k: {} consumed: {}", k, *consumed);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if window[k].data.is_none() {
 | 
					        if window[k].data.is_none() {
 | 
				
			||||||
            break;
 | 
					            break;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if let Some(blob) = &window[w].data {
 | 
					        if let Some(blob) = &window[w].data {
 | 
				
			||||||
            assert!(blob.read().unwrap().meta.size < BLOB_SIZE);
 | 
					            assert!(blob.read().unwrap().meta.size < BLOB_SIZE);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        consume_queue.push_back(window[k].data.clone().expect("clone in fn recv_window"));
 | 
					        consume_queue.push_back(window[k].data.clone().expect("clone in fn recv_window"));
 | 
				
			||||||
        *consumed += 1;
 | 
					        *consumed += 1;
 | 
				
			||||||
        if *consumed % WINDOW_SIZE == 0 {
 | 
					 | 
				
			||||||
            eprintln!("window wrapped, consumed {}", *consumed);
 | 
					 | 
				
			||||||
        }
 | 
					 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user