github gofr-dev/gofr v1.56.6

3 hours ago

Release v1.56.6

🛠️ Fixes

  • Crontab Goroutine Leak on Shutdown — The cron scheduler's ticker goroutine ran an unbounded for range c.ticker.C loop with no stop signal, so it leaked on every App.Shutdown(). Added a done channel and a Stop() method guarded by sync.Once, and the goroutine now selects between the ticker and done to exit cleanly. App.Shutdown() now stops the cron scheduler before closing the container, so scheduled jobs are no longer torn down out of order. (#3292)

  • Circuit Breaker Read-Lock & Non-Blocking RecoverycircuitBreaker.isOpen() took a full write Lock() for a read-only state check, and tryCircuitRecovery() held the lock across the entire healthCheck call — blocking all other requests for the duration of the health probe. isOpen() now uses RLock(), and recovery releases the lock before running the health check, re-acquiring it only to reset the circuit (and only if it's still in the open state). (#3255, #3427)

  • Subscriber Commits Messages After Handler Panic — When a subscription handler panicked, panicRecovery swallowed the panic and left err as nil, so the message fell through to msg.Commit() and was acknowledged despite never being processed — causing silent message loss. The recovery path now sets a sentinel error and returns before the commit, so a panicked message is left uncommitted and will be redelivered. (#3424)

  • Go 1.26 — Bumped Go to 1.26 across all modules and CI workflows. (#3426)

  • Dependency Updates — Consolidated minor and patch dependency updates across the core module and datasource sub-modules. (#3423)

Don't miss a new gofr release

NewReleases is sending notifications on new releases.