diff options
author | Martin Holst Swende <martin@swende.se> | 2019-06-24 16:54:06 +0800 |
---|---|---|
committer | Péter Szilágyi <peterke@gmail.com> | 2019-06-24 16:54:06 +0800 |
commit | f578d41ee6b3087f8021fd561a0b5665aea3dba6 (patch) | |
tree | 1aa79736761c5a6f4c5d1cb14c2e11d05b538740 | |
parent | cdadf57bf9d25744eaafddea34a4a66fead9f04b (diff) | |
download | go-tangerine-f578d41ee6b3087f8021fd561a0b5665aea3dba6.tar go-tangerine-f578d41ee6b3087f8021fd561a0b5665aea3dba6.tar.gz go-tangerine-f578d41ee6b3087f8021fd561a0b5665aea3dba6.tar.bz2 go-tangerine-f578d41ee6b3087f8021fd561a0b5665aea3dba6.tar.lz go-tangerine-f578d41ee6b3087f8021fd561a0b5665aea3dba6.tar.xz go-tangerine-f578d41ee6b3087f8021fd561a0b5665aea3dba6.tar.zst go-tangerine-f578d41ee6b3087f8021fd561a0b5665aea3dba6.zip |
core/vm, internal/ethapi: fail on eth_call when it times out, fixes #19186 (#19737)
-rw-r--r-- | core/vm/evm.go | 5 | ||||
-rw-r--r-- | internal/ethapi/api.go | 4 |
2 files changed, 9 insertions, 0 deletions
diff --git a/core/vm/evm.go b/core/vm/evm.go index 70e1cd1b8..d47b00938 100644 --- a/core/vm/evm.go +++ b/core/vm/evm.go @@ -169,6 +169,11 @@ func (evm *EVM) Cancel() { atomic.StoreInt32(&evm.abort, 1) } +// Cancelled returns true if Cancel has been called +func (evm *EVM) Cancelled() bool { + return atomic.LoadInt32(&evm.abort) == 1 +} + // Interpreter returns the current interpreter func (evm *EVM) Interpreter() Interpreter { return evm.interpreter diff --git a/internal/ethapi/api.go b/internal/ethapi/api.go index 4132ff144..338223fd5 100644 --- a/internal/ethapi/api.go +++ b/internal/ethapi/api.go @@ -802,6 +802,10 @@ func DoCall(ctx context.Context, b Backend, args CallArgs, blockNr rpc.BlockNumb if err := vmError(); err != nil { return nil, 0, false, err } + // If the timer caused an abort, return an appropriate error message + if evm.Cancelled() { + return nil, 0, false, fmt.Errorf("execution aborted (timeout = %v)", timeout) + } return res, gas, failed, err } |