fix: clear cancelled share runtime

This commit is contained in:
debpalash
2026-08-10 12:49:34 +00:00
parent 794942faf4
commit 88906fb23f
2 changed files with 27 additions and 2 deletions
+6 -2
View File
@@ -127,8 +127,12 @@ async def enable(app) -> ShareState:
try:
await asyncio.wait_for(asyncio.shield(_runtime.task), timeout=2)
except asyncio.CancelledError:
_runtime.server = server
_runtime.state = ShareState(True, port, pin, lan_ipv4_addresses())
if _runtime.task.done():
_runtime.server = _runtime.task = None
_runtime.state = ShareState()
else:
_runtime.server = server
_runtime.state = ShareState(True, port, pin, lan_ipv4_addresses())
app.state.network_share = _runtime.state
raise
except Exception as exc:
+21
View File
@@ -271,6 +271,27 @@ async def test_live_network_start_cleanup_can_be_retried_by_disable(monkeypatch)
assert network_share.get_state().enabled is False
@pytest.mark.asyncio
async def test_cancelled_terminal_network_start_resets_state(monkeypatch):
network_share = importlib.import_module("services.network_share")
task = asyncio.get_running_loop().create_future()
task.cancel()
server = SimpleNamespace(started=False, should_exit=False, serve=lambda: None)
monkeypatch.setattr(network_share, "_find_free_port", lambda _base: 3901)
monkeypatch.setattr(network_share.uvicorn, "Server", lambda _config: server)
monkeypatch.setattr(network_share.asyncio, "create_task", lambda _coro: task)
async def no_sleep(_seconds):
return None
monkeypatch.setattr(network_share.asyncio, "sleep", no_sleep)
app = SimpleNamespace(state=SimpleNamespace())
with pytest.raises(asyncio.CancelledError):
await network_share.enable(app)
assert network_share.get_state().enabled is False
assert network_share._runtime.server is None
assert network_share._runtime.task is None
assert app.state.network_share.enabled is False
def test_dub_abort_false_result_stays_retryable(monkeypatch):
dub_core = importlib.import_module("api.routers.dub_core")
job = {"id": "job-false"}