mirror of https://github.com/go-redis/redis.git
Merge pull request #1615 from adriansmares/master
Ensure Watch closes the transaction on panic
This commit is contained in:
commit
794e5c09aa
7
tx.go
7
tx.go
|
@ -65,16 +65,13 @@ func (c *Tx) Process(ctx context.Context, cmd Cmder) error {
|
||||||
// The transaction is automatically closed when fn exits.
|
// The transaction is automatically closed when fn exits.
|
||||||
func (c *Client) Watch(ctx context.Context, fn func(*Tx) error, keys ...string) error {
|
func (c *Client) Watch(ctx context.Context, fn func(*Tx) error, keys ...string) error {
|
||||||
tx := c.newTx(ctx)
|
tx := c.newTx(ctx)
|
||||||
|
defer tx.Close(ctx)
|
||||||
if len(keys) > 0 {
|
if len(keys) > 0 {
|
||||||
if err := tx.Watch(ctx, keys...).Err(); err != nil {
|
if err := tx.Watch(ctx, keys...).Err(); err != nil {
|
||||||
_ = tx.Close(ctx)
|
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return fn(tx)
|
||||||
err := fn(tx)
|
|
||||||
_ = tx.Close(ctx)
|
|
||||||
return err
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// Close closes the transaction, releasing any open resources.
|
// Close closes the transaction, releasing any open resources.
|
||||||
|
|
Loading…
Reference in New Issue