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