Skip to content

v0.3.17

@binaryfire binaryfire tagged this 26 Dec 01:38
The previous implementation had a bug where exceptions thrown during Redis
command execution were silently swallowed when:
1. A context connection existed (hasContextConnection=true)
2. The command required same-connection handling (multi/pipeline/select)

This happened because `return` statements inside a `finally` block override
any pending exception from the `catch` block.

Changes:
- Restructure try/catch/finally to capture exception without immediate re-throw
- Move exception re-throw to after finally block completes
- On error with same-connection commands: release connection instead of storing
  (a failed multi/pipeline/select has nothing to continue, storing would be wrong)
- Add comprehensive test coverage for exception propagation and connection
  release logic across all scenarios

The connection release behavior is now:
- Success + context connection: don't release (managed by context)
- Success + same-connection cmd: store in context, release via defer()
- Success + normal cmd: release immediately
- Error + context connection: don't release, propagate exception
- Error + same-connection cmd: release immediately, propagate exception
- Error + normal cmd: release immediately, propagate exception
Assets 2
Loading