aboutsummaryrefslogtreecommitdiff
path: root/retry.go
diff options
context:
space:
mode:
Diffstat (limited to 'retry.go')
-rw-r--r--retry.go16
1 files changed, 11 insertions, 5 deletions
diff --git a/retry.go b/retry.go
index 92efb9e..1997b18 100644
--- a/retry.go
+++ b/retry.go
@@ -1,14 +1,20 @@
package stm
-// Retry is a sentinel value. When thrown via panic, it indicates that a
+import (
+ "runtime/pprof"
+)
+
+var retries = pprof.NewProfile("stmRetries")
+
+// retry is a sentinel value. When thrown via panic, it indicates that a
// transaction should be retried.
-const Retry = "retry"
+var retry = &struct{}{}
// catchRetry returns true if fn calls tx.Retry.
-func catchRetry(fn Operation, tx *Tx) (result interface{}, retry bool) {
+func catchRetry(fn Operation, tx *Tx) (result interface{}, gotRetry bool) {
defer func() {
- if r := recover(); r == Retry {
- retry = true
+ if r := recover(); r == retry {
+ gotRetry = true
} else if r != nil {
panic(r)
}