Skip to content

Gracefully shut down sessions at application exit#2943

Draft
rwols wants to merge 1 commit into
feat/asynciofrom
feat/graceful-shutdown
Draft

Gracefully shut down sessions at application exit#2943
rwols wants to merge 1 commit into
feat/asynciofrom
feat/graceful-shutdown

Conversation

@rwols

@rwols rwols commented May 30, 2026

Copy link
Copy Markdown
Member

This PR does graceful session shutdown at application exit.

There's still some noise in the exit logs about things not existing anymore. But that's OK, the shutdown request and exit notification have been sent and things are shutting down.

Example log where I have 4 windows open with 6 different language servers:

(.venv) ~/.c/s/P/LSP (feat/graceful-shutdown|✔) $ cat ~/.config/sublime-text-3/Log/plugin_host-3.8-on_exit.log
LSP: stopping jdtls
LSP: stopping clangd
LSP: stopping LSP-json
LSP: stopping LSP-basedpyright
LSP: stopping LSP-ruff
LSP: stopping LSP-pyright
Error while closing sessions
Traceback (most recent call last):
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/core/sessions.py", line 2631, in shutdown_session_view
    return await session_view.shutdown()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 296, in shutdown
    return await listener.on_session_shutdown(self.session)
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/documents.py", line 338, in on_session_shutdown
    result = await removed_session.on_before_remove()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 91, in on_before_remove
    self.clear_code_lenses_async()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 403, in clear_code_lenses_async
    self._code_lens_phantoms.update([])
  File "/opt/sublime_text/Lib/python38/sublime.py", line 3938, in update
    for phantom, region in zip(self.phantoms, regions):
TypeError: 'NoneType' object is not iterable

Error while closing sessions
Traceback (most recent call last):
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/core/sessions.py", line 2631, in shutdown_session_view
    return await session_view.shutdown()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 296, in shutdown
    return await listener.on_session_shutdown(self.session)
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/documents.py", line 338, in on_session_shutdown
    result = await removed_session.on_before_remove()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 91, in on_before_remove
    self.clear_code_lenses_async()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 403, in clear_code_lenses_async
    self._code_lens_phantoms.update([])
  File "/opt/sublime_text/Lib/python38/sublime.py", line 3938, in update
    for phantom, region in zip(self.phantoms, regions):
TypeError: 'NoneType' object is not iterable

Error while closing sessions
Traceback (most recent call last):
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/core/sessions.py", line 2631, in shutdown_session_view
    return await session_view.shutdown()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 296, in shutdown
    return await listener.on_session_shutdown(self.session)
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/documents.py", line 338, in on_session_shutdown
    result = await removed_session.on_before_remove()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 91, in on_before_remove
    self.clear_code_lenses_async()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 403, in clear_code_lenses_async
    self._code_lens_phantoms.update([])
  File "/opt/sublime_text/Lib/python38/sublime.py", line 3938, in update
    for phantom, region in zip(self.phantoms, regions):
TypeError: 'NoneType' object is not iterable

Error while closing sessions
Traceback (most recent call last):
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/core/sessions.py", line 2631, in shutdown_session_view
    return await session_view.shutdown()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 296, in shutdown
    return await listener.on_session_shutdown(self.session)
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/documents.py", line 338, in on_session_shutdown
    result = await removed_session.on_before_remove()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 91, in on_before_remove
    self.clear_code_lenses_async()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 403, in clear_code_lenses_async
    self._code_lens_phantoms.update([])
  File "/opt/sublime_text/Lib/python38/sublime.py", line 3938, in update
    for phantom, region in zip(self.phantoms, regions):
TypeError: 'NoneType' object is not iterable

Error while closing sessions
Traceback (most recent call last):
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/core/sessions.py", line 2631, in shutdown_session_view
    return await session_view.shutdown()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 296, in shutdown
    return await listener.on_session_shutdown(self.session)
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/documents.py", line 338, in on_session_shutdown
    result = await removed_session.on_before_remove()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 91, in on_before_remove
    self.clear_code_lenses_async()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 403, in clear_code_lenses_async
    self._code_lens_phantoms.update([])
  File "/opt/sublime_text/Lib/python38/sublime.py", line 3938, in update
    for phantom, region in zip(self.phantoms, regions):
TypeError: 'NoneType' object is not iterable

Error while closing sessions
Traceback (most recent call last):
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/core/sessions.py", line 2631, in shutdown_session_view
    return await session_view.shutdown()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 296, in shutdown
    return await listener.on_session_shutdown(self.session)
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/documents.py", line 338, in on_session_shutdown
    result = await removed_session.on_before_remove()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 91, in on_before_remove
    self.clear_code_lenses_async()
  File "/home/raoul/.config/sublime-text-3/Packages/LSP/plugin/session_view.py", line 403, in clear_code_lenses_async
    self._code_lens_phantoms.update([])
  File "/opt/sublime_text/Lib/python38/sublime.py", line 3938, in update
    for phantom, region in zip(self.phantoms, regions):
TypeError: 'NoneType' object is not iterable

LSP: LSP-ruff has stopped
LSP: LSP-json has stopped
LSP: LSP-pyright has stopped
LSP: LSP-basedpyright has stopped
LSP: clangd has stopped
LSP: clangd crashed (1 / 5 times in the last 180.0 seconds), exit code -9, exception: None
LSP: jdtls has stopped
LSP: jdtls crashed (1 / 5 times in the last 180.0 seconds), exit code -9, exception: None

Depends on #2880.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant