From 32224fe842a61b490080c2ecdaf655881b1f6a99 Mon Sep 17 00:00:00 2001 From: Alex Shlyapnikov Date: Fri, 3 Nov 2017 23:31:00 +0000 Subject: [PATCH] [Sanitizers] Call NanoTime() conditionally. Summary: Call NanoTime() in primary 64 bit allocator only when necessary, otherwise the unwarranted syscall causes problems in sandbox environments. ReleaseToOSIntervalMs() conditional allows them to turn the feature off with allocator_release_to_os_interval_ms=-1 flag. Reviewers: eugenis Subscribers: kubamracek, llvm-commits Differential Revision: https://reviews.llvm.org/D39624 llvm-svn: 317386 --- compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h index b22f3ab..630ae35 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h @@ -677,7 +677,10 @@ class SizeClassAllocator64 { // preventing just allocated memory from being released sooner than // necessary and also preventing extraneous ReleaseMemoryPagesToOS calls // for short lived processes. - region->rtoi.last_release_at_ns = NanoTime(); + // Do it only when the feature is turned on, to avoid a potentially + // extraneous syscall. + if (ReleaseToOSIntervalMs() >= 0) + region->rtoi.last_release_at_ns = NanoTime(); } // Do the mmap for the user memory. uptr map_size = kUserMapSize; -- 2.7.4