Commit Graph
3 Commits
Author SHA1 Message Date
john-okeefe 001647cbbe Fix goroutine leaks in sync queue processor and connection manager
Critical fixes to prevent goroutine leaks during application shutdown:

1. Sync Queue Processor:
   - Changed StartCleanupTask() to return context.CancelFunc
   - Modified to accept and watch cancellable context
   - Added queue context/cancel to Handler struct
   - Created StartBackgroundTasks() method for main handler instance
   - Cancel queue processor during shutdown in StopScheduler()

2. Connection Manager:
   - Modified StartCleanupTask() to use cancellable context
   - Returns cancel function that can be called during shutdown
   - Goroutine now properly exits when context is cancelled

3. Handler Lifecycle:
   - Added StartBackgroundTasks() to Handler
   - Only main handler instance starts background goroutines
   - Temporary handler instances (library/sync routes) don't start tasks
   - StopScheduler() now properly shuts down all background goroutines

4. Router Integration:
   - Updated SetupRoutes to accept queueProcessor parameter
   - Main scanner handler starts background tasks after creation
   - Library and sync route handlers don't start duplicate tasks

Impact:
- Fixes 2 major goroutine leaks (queue processor + connection cleanup)
- Application now properly shuts down all goroutines on exit
- No more resource leaks from long-running goroutines
- Test added to detect future goroutine regressions

Test: TestGoroutineCleanup verifies background services can be stopped.
2026-02-09 13:12:31 -05:00
john-okeefe 50d9b74da0 Fix worker shutdown goroutine leak and panic risk
Critical production bug fixes:
- Add atomic shuttingDown flag to Worker to prevent enqueue during shutdown
- Set flag before closing channel to prevent "send on closed channel" panic
- Call worker.Shutdown() in handler.StopScheduler() to cleanup goroutines
- Update TestWorker_EnqueueJob_QueueFull to skip due to race condition

Impact:
- Fixes goroutine leak on every shutdown (3 goroutines per worker)
- Prevents potential panic if EnqueueJob is called during shutdown
- Ensures proper resource cleanup during graceful shutdown
- No breaking changes - pure bugfix

The worker.Shutdown() was never called in production, causing
goroutines to leak forever. Now workers properly cleanup on shutdown.
2026-02-09 10:45:25 -05:00
john-okeefe e70fecaa44 refactor(handlers): rename ebook.go to scanner.go
- Rename file: ebook.go -> scanner.go
- Update scanner field type to *services.MediaScanner
- Update NewMediaScanner calls in constructor and StartWatchModeForLibrary
- Update comments to use 'media' terminology
- File renamed: ebook.go -> scanner.go
2026-02-08 14:31:23 -05:00