From 20ff2c5d651444b8093857268e12a27abb0bf148 Mon Sep 17 00:00:00 2001
From: Evgeny Danilenko <6655321@bk.ru>
Date: Thu, 10 Jun 2021 18:45:45 +0300
Subject: [PATCH] EVM test deadlock (#2136)

* fix EVM test deadlock

* set stateRoot even in case of an error
---
 cmd/evm/staterunner.go | 14 +++++++-------
 1 file changed, 7 insertions(+), 7 deletions(-)

diff --git a/cmd/evm/staterunner.go b/cmd/evm/staterunner.go
index ea1fef4a7f..c51cd5d7d5 100644
--- a/cmd/evm/staterunner.go
+++ b/cmd/evm/staterunner.go
@@ -31,7 +31,6 @@ import (
 	"github.com/ledgerwatch/erigon/log"
 	"github.com/ledgerwatch/erigon/tests"
 	"github.com/ledgerwatch/erigon/turbo/trie"
-
 	"github.com/urfave/cli"
 )
 
@@ -105,6 +104,7 @@ func stateTestCmd(ctx *cli.Context) error {
 	if txErr != nil {
 		return txErr
 	}
+	defer tx.Rollback()
 
 	for key, test := range tests {
 		for _, st := range test.Subtests() {
@@ -112,17 +112,17 @@ func stateTestCmd(ctx *cli.Context) error {
 			result := &StatetestResult{Name: key, Fork: st.Fork, Pass: true}
 
 			var root common.Hash
+			var calcRootErr error
 
 			statedb, err := test.Run(context.Background(), tx, st, cfg)
-
+			// print state root for evmlab tracing
+			root, calcRootErr = trie.CalcRoot("", tx)
+			if err == nil && calcRootErr != nil {
+				err = calcRootErr
+			}
 			if err != nil {
 				// Test failed, mark as so and dump any state to aid debugging
 				result.Pass, result.Error = false, err.Error()
-			} else {
-				root, err = trie.CalcRoot("", tx)
-				if err != nil {
-					result.Pass, result.Error = false, err.Error()
-				}
 			}
 
 			/*
-- 
GitLab