diff options
Diffstat (limited to 'retry.go')
-rw-r--r-- | retry.go | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/retry.go b/retry.go new file mode 100644 index 0000000..7800ae9 --- /dev/null +++ b/retry.go @@ -0,0 +1,18 @@ +package stm + +// Retry is a sentinel value. When thrown via panic, it indicates that a +// transaction should be retried. +const Retry = "retry" + +// catchRetry returns true if fn calls tx.Retry. +func catchRetry(fn func(*Tx), tx *Tx) (retry bool) { + defer func() { + if r := recover(); r == Retry { + retry = true + } else if r != nil { + panic(r) + } + }() + fn(tx) + return +} |