Component
pygls/progress.py
Summary
Progress.begin and Progress.create register tokens in a dictionary, but Progress.end never removes them. A long-running server that reports frequent progress will leak Future objects and token entries without bound.
Steps to Reproduce
- Report work-done progress repeatedly over hours.
- Observe that
len(lsp.protocol.progress.tokens) grows monotonically.
Expected Behavior
Tokens should be cleaned up when progress ends.
Actual Behavior
Tokens remain in memory forever.
Affected Code (pygls/progress.py, ~L77-79)
def end(self, token, value):
self._lsp.notify(PROGRESS, ProgressParams(token=token, value=value))
Proposed Fix
def end(self, token, value):
self.tokens.pop(token, None)
self._lsp.notify(PROGRESS, ProgressParams(token=token, value=value))
Component
pygls/progress.py
Summary
Progress.beginandProgress.createregister tokens in a dictionary, butProgress.endnever removes them. A long-running server that reports frequent progress will leakFutureobjects and token entries without bound.Steps to Reproduce
len(lsp.protocol.progress.tokens)grows monotonically.Expected Behavior
Tokens should be cleaned up when progress ends.
Actual Behavior
Tokens remain in memory forever.
Affected Code (
pygls/progress.py, ~L77-79)Proposed Fix