From 7655ef3f131d1dfd33e1d0252df1aaaf04e31dc0 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 23 Oct 2019 15:38:09 +1100 Subject: Break up the stm.go file --- retry.go | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 retry.go (limited to 'retry.go') 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 +} -- cgit v1.2.3