diff --git a/python/sglang/srt/managers/cache_controller.py b/python/sglang/srt/managers/cache_controller.py index 8a8237c65..93a6d7b2e 100644 --- a/python/sglang/srt/managers/cache_controller.py +++ b/python/sglang/srt/managers/cache_controller.py @@ -659,13 +659,14 @@ class HiCacheController: f"Prefetch operation {operation.request_id} failed to retrieve page {hash_values[i]}." ) break - if operation.increment(self.page_size): - self.mem_pool_host.set_from_flat_data_page( - host_indices[i * self.page_size], - page_data[i], - ) - else: - break + # Must set the data before increasing the completed tokens. + # Otherwise this page may be read before being set. + self.mem_pool_host.set_from_flat_data_page( + host_indices[i * self.page_size], + page_data[i], + ) + if not operation.increment(self.page_size): + break # Operation terminated by controller def _page_transfer(self, operation): # Select the get function and batch size