fix: properly close telegram client session to prevent resource leak (issue #52) #56

Merged
jihoson merged 1 commits from feature/issue-52-aiohttp-cleanup into main 2026-02-05 00:46:25 +09:00
Collaborator

Summary

  • Eliminates "Unclosed client session" warnings on shutdown
  • Adds proper cleanup of Telegram API aiohttp session
  • Prevents resource leaks in long-running processes

Problem

TelegramClient creates its own aiohttp session but wasn't being closed during shutdown, causing:

ERROR: Unclosed client session
client_session: <aiohttp.client.ClientSession object at 0x...>
ERROR: Unclosed connector

Root Cause

run() function's finally block only closed:

  • broker.close() - KIS API session
  • telegram.close() - Missing!
  • db_conn.close() - Database connection

Solution

Add await telegram.close() to finally block for proper cleanup.

Changes

  • src/main.py:553 - Add await telegram.close() in shutdown

Before/After

Before:

finally:
    await broker.close()
    db_conn.close()
    logger.info("The Ouroboros rests.")

Result: Unclosed aiohttp session warnings

After:

finally:
    # Clean up resources
    await broker.close()
    await telegram.close()  # ✅ Added
    db_conn.close()
    logger.info("The Ouroboros rests.")

Result: Clean shutdown, no warnings

Test Results

  • All 15 main.py tests pass
  • TelegramClient has close() method that properly closes session
  • No breaking changes to existing functionality

Implementation Notes

  • KISBroker: Has close() method, already called
  • OverseasBroker: Reuses KISBroker session, no separate close needed
  • TelegramClient: Has separate session, needs close() call Fixed
  • GeminiClient: Uses httpx with no persistent session, no close needed

Benefits

  1. Eliminates warnings - Clean shutdown logs
  2. Prevents leaks - Proper resource cleanup
  3. Best practices - Follows aiohttp documentation
  4. Minimal change - One line addition, zero risk

Closes #52

🤖 Generated with Claude Code

## Summary - Eliminates "Unclosed client session" warnings on shutdown - Adds proper cleanup of Telegram API aiohttp session - Prevents resource leaks in long-running processes ## Problem TelegramClient creates its own aiohttp session but wasn't being closed during shutdown, causing: ``` ERROR: Unclosed client session client_session: <aiohttp.client.ClientSession object at 0x...> ERROR: Unclosed connector ``` ## Root Cause `run()` function's finally block only closed: - ✅ `broker.close()` - KIS API session - ❌ `telegram.close()` - **Missing!** - ✅ `db_conn.close()` - Database connection ## Solution Add `await telegram.close()` to finally block for proper cleanup. ## Changes - **src/main.py:553** - Add `await telegram.close()` in shutdown ## Before/After **Before:** ```python finally: await broker.close() db_conn.close() logger.info("The Ouroboros rests.") ``` Result: Unclosed aiohttp session warnings **After:** ```python finally: # Clean up resources await broker.close() await telegram.close() # ✅ Added db_conn.close() logger.info("The Ouroboros rests.") ``` Result: Clean shutdown, no warnings ## Test Results - All 15 main.py tests pass - TelegramClient has `close()` method that properly closes session - No breaking changes to existing functionality ## Implementation Notes - **KISBroker**: Has `close()` method, already called ✅ - **OverseasBroker**: Reuses KISBroker session, no separate close needed - **TelegramClient**: Has separate session, **needs `close()` call** ✅ Fixed - **GeminiClient**: Uses httpx with no persistent session, no close needed ## Benefits 1. **Eliminates warnings** - Clean shutdown logs 2. **Prevents leaks** - Proper resource cleanup 3. **Best practices** - Follows aiohttp documentation 4. **Minimal change** - One line addition, zero risk Closes #52 🤖 Generated with [Claude Code](https://claude.com/claude-code)
agentson added 1 commit 2026-02-05 00:40:59 +09:00
fix: properly close telegram client session to prevent resource leak (issue #52)
Some checks failed
CI / test (pull_request) Has been cancelled
db0d966a6a
Adds telegram.close() to finally block to ensure aiohttp session cleanup.

Changes:
- src/main.py:553 - Add await telegram.close() in shutdown

Before:
- broker.close() called 
- telegram.close() NOT called 
- "Unclosed client session" error on shutdown

After:
- broker.close() called 
- telegram.close() called 
- Clean shutdown, no resource leak errors

Impact:
- Eliminates aiohttp resource leak warnings
- Proper cleanup of Telegram API connections
- No memory leaks in long-running processes

Related:
- KISBroker.close() already handles broker session
- OverseasBroker reuses KISBroker session (no separate close needed)
- TelegramClient has separate session that needs cleanup

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
jihoson merged commit be04820b00 into main 2026-02-05 00:46:25 +09:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: jihoson/The-Ouroboros#56