diff --git a/ext/bootsnap/bootsnap.c b/ext/bootsnap/bootsnap.c index 72c5b06..2dae8ef 100644 --- a/ext/bootsnap/bootsnap.c +++ b/ext/bootsnap/bootsnap.c @@ -38,6 +38,10 @@ #define RB_UNLIKELY(x) (x) #endif +#ifdef HAVE_FDATASYNC +#define BS_REVALIDATE_CACHE 1 +#endif + /* * An instance of this key is written as the first 64 bytes of each cache file. * The mtime and size members track whether the file contents have changed, and @@ -319,7 +323,15 @@ static enum cache_status cache_key_equal_fast_path(struct bs_cache_key *k1, k1->ruby_platform == k2->ruby_platform && k1->compile_option == k2->compile_option && k1->ruby_revision == k2->ruby_revision && k1->size == k2->size) { - return (k1->mtime == k2->mtime) ? hit : stale; + if (k1->mtime == k2->mtime) { + return hit; + } else { +#ifdef BS_REVALIDATE_CACHE + return stale; +#else + return miss; +#endif + } } return miss; } diff --git a/test/compile_cache_test.rb b/test/compile_cache_test.rb index 63fd93a..2573ef5 100644 --- a/test/compile_cache_test.rb +++ b/test/compile_cache_test.rb @@ -160,6 +160,8 @@ def test_dont_store_cache_after_a_stale_when_readonly end def test_dont_revalidate_when_readonly + skip("Not on Windows") if RUBY_PLATFORM.match?(/mswin|mingw|cygwin/) + path = Help.set_file("a.rb", "a = a = 3", 100) load(path) @@ -220,6 +222,8 @@ def test_instrumentation_miss end def test_instrumentation_revalidate + skip("Not on Windows") if RUBY_PLATFORM.match?(/mswin|mingw|cygwin/) + file_path = Help.set_file("a.rb", "a = a = 3", 100) load(file_path) FileUtils.touch("a.rb", mtime: File.mtime("a.rb") + 42)