mirror of
https://github.com/alexta69/metube.git
synced 2026-09-21 21:45:04 +00:00
fix: release per-download status_queue proxy on close to stop FD leak
This commit is contained in:
@@ -898,6 +898,40 @@ def _make_download(dq_env, *, download_type="video", status="downloading", filen
|
||||
)
|
||||
|
||||
|
||||
def test_download_close_releases_status_queue(dq_env):
|
||||
download = _make_download(dq_env)
|
||||
status_queue = MagicMock()
|
||||
proc = MagicMock()
|
||||
download.status_queue = status_queue
|
||||
download.proc = proc
|
||||
|
||||
download.close()
|
||||
|
||||
proc.close.assert_called_once()
|
||||
assert download.status_queue is None
|
||||
|
||||
|
||||
def test_download_close_releases_status_queue_without_process(dq_env):
|
||||
download = _make_download(dq_env)
|
||||
download.status_queue = MagicMock()
|
||||
|
||||
download.close()
|
||||
|
||||
assert download.status_queue is None
|
||||
|
||||
|
||||
def test_download_close_releases_status_queue_when_process_close_fails(dq_env):
|
||||
download = _make_download(dq_env)
|
||||
download.status_queue = MagicMock()
|
||||
download.proc = MagicMock()
|
||||
download.proc.close.side_effect = RuntimeError('close failed')
|
||||
|
||||
with pytest.raises(RuntimeError, match='close failed'):
|
||||
download.close()
|
||||
|
||||
assert download.status_queue is None
|
||||
|
||||
|
||||
@pytest.mark.asyncio
|
||||
async def test_post_download_cleanup_clears_filename_on_error(dq_env):
|
||||
notifier = AsyncMock()
|
||||
|
||||
+5
-2
@@ -758,8 +758,11 @@ class Download:
|
||||
|
||||
def close(self):
|
||||
log.info(f"Closing download process for: {self.info.title}")
|
||||
if self.started():
|
||||
self.proc.close()
|
||||
try:
|
||||
if self.started():
|
||||
self.proc.close()
|
||||
finally:
|
||||
self.status_queue = None
|
||||
|
||||
def running(self):
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user