mirror of https://github.com/ethereum/go-ethereum
travis.yml: add race detector job for Swarm (#19148)
parent
1993227311
commit
d9adcd3a27
@ -0,0 +1,46 @@ |
||||
#!/usr/bin/env bash |
||||
|
||||
# travis_keepalive runs the given command and preserves its return value, |
||||
# while it forks a child process what periodically produces a log line, |
||||
# so that Travis won't abort the build after 10 minutes. |
||||
|
||||
# Why? |
||||
# `t.Log()` in Go holds the buffer until the test does not pass or fail, |
||||
# and `-race` can increase the execution time by 2-20x. |
||||
|
||||
set -euo pipefail |
||||
|
||||
readonly KEEPALIVE_INTERVAL=300 # seconds => 5m |
||||
|
||||
main() { |
||||
keepalive |
||||
$@ |
||||
} |
||||
|
||||
# Keepalive produces a log line in each KEEPALIVE_INTERVAL. |
||||
keepalive() { |
||||
local child_pid |
||||
# Note: We fork here! |
||||
repeat "keepalive" & |
||||
child_pid=$! |
||||
ensureChildOnEXIT "${child_pid}" |
||||
} |
||||
|
||||
repeat() { |
||||
local this="$1" |
||||
while true; do |
||||
echo "${this}" |
||||
sleep "${KEEPALIVE_INTERVAL}" |
||||
done |
||||
} |
||||
|
||||
# Ensures that the child gets killed on normal program exit. |
||||
ensureChildOnEXIT() { |
||||
# Note: SIGINT and SIGTERM are forwarded to the child process by Bash |
||||
# automatically, so we don't have to deal with signals. |
||||
|
||||
local child_pid="$1" |
||||
trap "kill ${child_pid}" EXIT |
||||
} |
||||
|
||||
main "$@" |
Loading…
Reference in new issue