summaryrefslogtreecommitdiffstats
path: root/third_party
diff options
context:
space:
mode:
authorjln@chromium.org <jln@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-08 17:27:19 +0000
committerjln@chromium.org <jln@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-01-08 17:27:19 +0000
commitff7319a88defa09542250dc15a7273f37a7de6d7 (patch)
tree8a931c56d7f4d844444663b27aa59f8a5e542e2d /third_party
parentce37a153aa8edcda878ca8dde0a61f43e514c88f (diff)
downloadchromium_src-ff7319a88defa09542250dc15a7273f37a7de6d7.zip
chromium_src-ff7319a88defa09542250dc15a7273f37a7de6d7.tar.gz
chromium_src-ff7319a88defa09542250dc15a7273f37a7de6d7.tar.bz2
TCMalloc: reduce waiting time in SpinLockDelay on Linux
Because of an optimization in Unlock(), we can't expect explicit wake-ups and shouldn't wait for too long in SpinLockDelay. BUG=168139 NOTRY=true Review URL: https://chromiumcodereview.appspot.com/11784009 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@175543 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'third_party')
-rw-r--r--third_party/tcmalloc/chromium/src/base/spinlock_linux-inl.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/third_party/tcmalloc/chromium/src/base/spinlock_linux-inl.h b/third_party/tcmalloc/chromium/src/base/spinlock_linux-inl.h
index c190d52..4a1498d 100644
--- a/third_party/tcmalloc/chromium/src/base/spinlock_linux-inl.h
+++ b/third_party/tcmalloc/chromium/src/base/spinlock_linux-inl.h
@@ -87,16 +87,16 @@ void SpinLockDelay(volatile Atomic32 *w, int32 value, int loop) {
struct timespec tm;
tm.tv_sec = 0;
if (have_futex) {
+ // Wait between 0-16ms.
tm.tv_nsec = base::internal::SuggestedDelayNS(loop);
- } else {
- tm.tv_nsec = 2000001; // above 2ms so linux 2.4 doesn't spin
- }
- if (have_futex) {
- tm.tv_nsec *= 16; // increase the delay; we expect explicit wakeups
+ // Note: since Unlock() is optimized to not do a compare-and-swap,
+ // we can't expect explicit wake-ups. Therefore we shouldn't wait too
+ // long here.
syscall(__NR_futex, reinterpret_cast<int *>(const_cast<Atomic32 *>(w)),
FUTEX_WAIT | futex_private_flag,
value, reinterpret_cast<struct kernel_timespec *>(&tm));
} else {
+ tm.tv_nsec = 2000001; // above 2ms so linux 2.4 doesn't spin
nanosleep(&tm, NULL);
}
errno = save_errno;