Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(716)

Unified Diff: base/process_util_mac.mm

Issue 6711017: Update OOM killer. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: update Created 9 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | third_party/apple_apsl/CFBase.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: base/process_util_mac.mm
diff --git a/base/process_util_mac.mm b/base/process_util_mac.mm
index 39eabac079097a0ca2434f05d57846a7fdee41dc..e2df2ca43e52f8f2046b1311bed34e7e6713fbbf 100644
--- a/base/process_util_mac.mm
+++ b/base/process_util_mac.mm
@@ -1,4 +1,4 @@
-// Copyright (c) 2008 The Chromium Authors. All rights reserved.
+// Copyright (c) 2011 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
@@ -622,7 +622,33 @@ void oom_killer_new() {
// === Core Foundation CFAllocators ===
-typedef ChromeCFAllocator* ChromeCFAllocatorRef;
+bool CanGetContextForCFAllocator(long darwin_version) {
+ // TODO(avi): remove at final release; http://crbug.com/74589
+ if (darwin_version == 11) {
+ NSLog(@"Unsure about the internals of CFAllocator but going to patch them "
+ "anyway. Watch out for crashes inside of CFAllocatorAllocate.");
+ }
+ return darwin_version == 9 ||
+ darwin_version == 10 ||
+ darwin_version == 11;
+}
+
+CFAllocatorContext* ContextForCFAllocator(CFAllocatorRef allocator,
+ long darwin_version) {
+ if (darwin_version == 9 || darwin_version == 10) {
+ ChromeCFAllocator9and10* our_allocator =
+ const_cast<ChromeCFAllocator9and10*>(
+ reinterpret_cast<const ChromeCFAllocator9and10*>(allocator));
+ return &our_allocator->_context;
+ } else if (darwin_version == 11) {
+ ChromeCFAllocator11* our_allocator =
+ const_cast<ChromeCFAllocator11*>(
+ reinterpret_cast<const ChromeCFAllocator11*>(allocator));
+ return &our_allocator->_context;
+ } else {
+ return NULL;
+ }
+}
CFAllocatorAllocateCallBack g_old_cfallocator_system_default;
CFAllocatorAllocateCallBack g_old_cfallocator_malloc;
@@ -833,29 +859,30 @@ void EnableTerminationOnOutOfMemory() {
<< "Old allocators unexpectedly non-null";
bool cf_allocator_internals_known =
- darwin_version == 9 || darwin_version == 10;
+ CanGetContextForCFAllocator(darwin_version);
if (cf_allocator_internals_known) {
- ChromeCFAllocatorRef allocator = const_cast<ChromeCFAllocatorRef>(
- reinterpret_cast<const ChromeCFAllocator*>(kCFAllocatorSystemDefault));
- g_old_cfallocator_system_default = allocator->_context.allocate;
+ CFAllocatorContext* context =
+ ContextForCFAllocator(kCFAllocatorSystemDefault, darwin_version);
+ CHECK(context) << "Failed to get context for kCFAllocatorSystemDefault.";
+ g_old_cfallocator_system_default = context->allocate;
CHECK(g_old_cfallocator_system_default)
<< "Failed to get kCFAllocatorSystemDefault allocation function.";
- allocator->_context.allocate = oom_killer_cfallocator_system_default;
+ context->allocate = oom_killer_cfallocator_system_default;
- allocator = const_cast<ChromeCFAllocatorRef>(
- reinterpret_cast<const ChromeCFAllocator*>(kCFAllocatorMalloc));
- g_old_cfallocator_malloc = allocator->_context.allocate;
+ context = ContextForCFAllocator(kCFAllocatorMalloc, darwin_version);
+ CHECK(context) << "Failed to get context for kCFAllocatorMalloc.";
+ g_old_cfallocator_malloc = context->allocate;
CHECK(g_old_cfallocator_malloc)
<< "Failed to get kCFAllocatorMalloc allocation function.";
- allocator->_context.allocate = oom_killer_cfallocator_malloc;
+ context->allocate = oom_killer_cfallocator_malloc;
- allocator = const_cast<ChromeCFAllocatorRef>(
- reinterpret_cast<const ChromeCFAllocator*>(kCFAllocatorMallocZone));
- g_old_cfallocator_malloc_zone = allocator->_context.allocate;
+ context = ContextForCFAllocator(kCFAllocatorMallocZone, darwin_version);
+ CHECK(context) << "Failed to get context for kCFAllocatorMallocZone.";
+ g_old_cfallocator_malloc_zone = context->allocate;
CHECK(g_old_cfallocator_malloc_zone)
<< "Failed to get kCFAllocatorMallocZone allocation function.";
- allocator->_context.allocate = oom_killer_cfallocator_malloc_zone;
+ context->allocate = oom_killer_cfallocator_malloc_zone;
} else {
NSLog(@"Internals of CFAllocator not known; out-of-memory failures via "
"CFAllocator will not result in termination. http://crbug.com/45650");
« no previous file with comments | « no previous file | third_party/apple_apsl/CFBase.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698