From d15b79e96e7bfdc52149eccc441631454bc87ec5 Mon Sep 17 00:00:00 2001 From: Feng Yao Date: Wed, 1 Jul 2026 22:04:09 -0700 Subject: [PATCH] [bug6] clear stale mamba cow source on rematch (#29354) Co-authored-by: Zhangheng Co-authored-by: Hanming Lu Co-authored-by: Hanming Lu <69857889+hanming-lu@users.noreply.github.com> --- python/sglang/srt/managers/scheduler.py | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/python/sglang/srt/managers/scheduler.py b/python/sglang/srt/managers/scheduler.py index df5a49d0d..43ddeb397 100644 --- a/python/sglang/srt/managers/scheduler.py +++ b/python/sglang/srt/managers/scheduler.py @@ -2895,15 +2895,18 @@ class Scheduler( # pre-existing from a session). Session-held slots have their own # lifecycle and freeing them here causes double-free. added = len(adder.can_run_list) > 0 and req is adder.can_run_list[-1] - if ( - not added - and req.mamba_pool_idx is not None - and not getattr(req, "session", None) - ): - self.tree_cache.req_to_token_pool.mamba_allocator.free( - req.mamba_pool_idx.unsqueeze(-1) - ) - req.mamba_pool_idx = None + if not added: + # init_next_round_input() may stage deferred Mamba COW/clear + # metadata before add_one_req() rejects the request. + req.mamba_cow_src_index = None + req.mamba_needs_clear = False + if req.mamba_pool_idx is not None and not getattr( + req, "session", None + ): + self.tree_cache.req_to_token_pool.mamba_allocator.free( + req.mamba_pool_idx.unsqueeze(-1) + ) + req.mamba_pool_idx = None break if mamba_allocator is not None: