forked from mirror/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