fix: proxy rotation page pool leak

This commit is contained in:
yetval
2026-04-02 11:57:17 -04:00
parent 966e17a1dc
commit 6c6aabeb73
2 changed files with 15 additions and 0 deletions
+6
View File
@@ -196,11 +196,14 @@ class SyncSession:
context_options = self._build_context_with_proxy(proxy)
context: BrowserContext = self.browser.new_context(**context_options)
page_info = None
try:
context = self._initialize_context(self._config, context)
page_info = self._get_page(timeout, extra_headers, disable_resources, blocked_domains, context=context)
yield page_info
finally:
if page_info is not None and page_info in self.page_pool.pages:
self.page_pool.pages.remove(page_info)
context.close()
else:
# Standard mode: use PagePool with persistent context
@@ -380,6 +383,7 @@ class AsyncSession:
context_options = self._build_context_with_proxy(proxy)
context: AsyncBrowserContext = await self.browser.new_context(**context_options)
page_info = None
try:
context = await self._initialize_context(self._config, context)
page_info = await self._get_page(
@@ -387,6 +391,8 @@ class AsyncSession:
)
yield page_info
finally:
if page_info is not None and page_info in self.page_pool.pages:
self.page_pool.pages.remove(page_info)
await context.close()
else:
# Standard mode: use PagePool with persistent context
+9
View File
@@ -84,6 +84,15 @@ class TestPagePool:
with pytest.raises(RuntimeError):
pool.add_page(Mock())
def test_proxy_rotation_pool_leak(self):
pool = PagePool(max_pages=1)
page_info = pool.add_page(Mock())
assert pool.pages_count == 1
pool.pages.remove(page_info)
assert pool.pages_count == 0
pool.add_page(Mock())
assert pool.pages_count == 1
def test_cleanup_error_pages(self):