[llvm] r186282 - The archive update test has a subtle race condition in it: if the test

Rafael EspĂ­ndola rafael.espindola at gmail.com
Mon Jul 15 13:02:59 PDT 2013


Thanks!

On 14 July 2013 06:46, Chandler Carruth <chandlerc at gmail.com> wrote:
> Author: chandlerc
> Date: Sun Jul 14 05:46:51 2013
> New Revision: 186282
>
> URL: http://llvm.org/viewvc/llvm-project?rev=186282&view=rev
> Log:
> The archive update test has a subtle race condition in it: if the test
> is executed within the same second as the inputs for the test are
> checked out from the source tree, it will fail to update due to being
> below the resolution of the 'mtime' test used.
>
> Now, this may seem improbably to you... ok, maybe *really* improbable,
> but consider a system which does distributed execution of tests by
> shipping their inputs to another machine and runs them. That might cause
> the mtime to be quite recent during the test run. ;]
>
> Instead, create two files directly in the test (allowing all platforms
> to see the problem) and add either a use of the 'touch' command that
> forces one mtime to some time quite a bit in the past, or it sleeps for
> just over a second to be outside of the precision window.
>
> Modified:
>     llvm/trunk/test/Object/archive-update.test
>
> Modified: llvm/trunk/test/Object/archive-update.test
> URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Object/archive-update.test?rev=186282&r1=186281&r2=186282&view=diff
> ==============================================================================
> --- llvm/trunk/test/Object/archive-update.test (original)
> +++ llvm/trunk/test/Object/archive-update.test Sun Jul 14 05:46:51 2013
> @@ -6,24 +6,32 @@ RUN: cd %T
>  RUN: rm -f %t.a
>
>  Create a file named evenlen that is newer than the evenlen on the source dir.
> -RUN: mkdir -p %t.dir
> -RUN: echo newer > %t.dir/evenlen
> +RUN: mkdir -p %t.older
> +RUN: echo older > %t.older/evenlen
> +
> +Either the shell supports the 'touch' command with a flag to manually set the
> +mtime or we sleep for over a second so that the mtime is definitely observable.
> +RUN: touch -m -t 200001010000 %t.older/evenlen || sleep 1.1
> +
> +RUN: mkdir -p %t.newer
> +RUN: echo newer > %t.newer/evenlen
> +RUN: touch %t.newer/evenlen
>
>  Create an achive with the newest file
> -RUN: llvm-ar r %t.a %t.dir/evenlen
> +RUN: llvm-ar r %t.a %t.newer/evenlen
>  RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
>
>  Check that without the 'u' option the member is replaced with an older file.
> -RUN: llvm-ar r %t.a %p/Inputs/evenlen
> +RUN: llvm-ar r %t.a %t.older/evenlen
>  RUN: llvm-ar p %t.a | FileCheck --check-prefix=OLDER %s
>
>  Check that with the 'u' option the member is replaced with a newer file.
> -RUN: llvm-ar ru %t.a %t.dir/evenlen
> +RUN: llvm-ar ru %t.a %t.newer/evenlen
>  RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
>
>  Check that with the 'u' option the member is not replaced with an older file.
> -RUN: llvm-ar ru %t.a %p/Inputs/evenlen
> +RUN: llvm-ar ru %t.a %t.older/evenlen
>  RUN: llvm-ar p %t.a | FileCheck --check-prefix=NEWER %s
>
>  NEWER: newer
> -OLDER: evenlen
> +OLDER: older
>
>
> _______________________________________________
> llvm-commits mailing list
> llvm-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits



More information about the llvm-commits mailing list