1233f401cSDmitry Vyukov#!/usr/bin/env bash 2233f401cSDmitry Vyukov# This script is used to deflake inherently flaky tsan tests. 3233f401cSDmitry Vyukov# It is invoked from lit tests as: 4*dadc214eSAnh Tuyen Tran# %deflake $THRESHOLD mybinary 5233f401cSDmitry Vyukov# which is then substituted by lit to: 6*dadc214eSAnh Tuyen Tran# $(dirname %s)/deflake.bash $THRESHOLD mybinary 7*dadc214eSAnh Tuyen Tran# - When TSAN_TEST_DEFLAKE_THRESHOLD is defined to a positive integer value, 8*dadc214eSAnh Tuyen Tran# THRESHOLD will be the defined value. 9*dadc214eSAnh Tuyen Tran# - When TSAN_TEST_DEFLAKE_THRESHOLD is not defined, THRESHOLD will be 10. 10*dadc214eSAnh Tuyen Tran# The script runs the target program up to $THRESHOLD times, 11233f401cSDmitry Vyukov# until it fails (i.e. produces a race report). 12233f401cSDmitry Vyukov 13*dadc214eSAnh Tuyen TranTHRESHOLD="${1}" 14*dadc214eSAnh Tuyen Transhift 15*dadc214eSAnh Tuyen Tran 16*dadc214eSAnh Tuyen Tran# Early exit if $THRESHOLD is not a non-negative integer 17*dadc214eSAnh Tuyen Tran[[ "${THRESHOLD}" =~ ^[0-9]+$ ]] || exit 1 18*dadc214eSAnh Tuyen Tran 19*dadc214eSAnh Tuyen Tranwhile (( THRESHOLD-- )); do 20233f401cSDmitry Vyukov OUT=`$@ 2>&1` 21233f401cSDmitry Vyukov if [[ $? != 0 ]]; then 22233f401cSDmitry Vyukov echo "$OUT" 23233f401cSDmitry Vyukov exit 0 24233f401cSDmitry Vyukov fi 25233f401cSDmitry Vyukovdone 26233f401cSDmitry Vyukovexit 1 27