fix: close curl_cffi Session to prevent memory leak
ruruo
ee9529c
OpenAIBackendAPI creates a curl_cffi.requests.Session in __init__ but
never closes it. Each Session wraps a libcurl handle (~50KB of C-allocated
memory invisible to Python's GC). The account-watcher refreshes ~378
accounts every 5 minutes, leaking ~210MB/hour — observed RSS grew from
50MB to 3.7GB over 16 hours.
Changes:
- Add close(), __del__, __enter__, __exit__ to OpenAIBackendAPI
(idempotent via _closed flag, safe via getattr for partial init)
- Wrap all 8 call sites with try/finally to ensure session cleanup:
- account_service.fetch_remote_info (x2, the primary leak source)
- conversation.stream_text_deltas (generator — must use finally, not __del__)
- conversation._generate_single_image retry loop
- image_task_service._run_resume_poll
- openai_search.handle
- openai_v1_models.list_models
- editable_file_task_service (background task)