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

Side by Side Diff: base/process_util_mac.mm

Issue 10908245: unchecked_malloc() for Skia on OSX. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "base/process_util.h" 5 #include "base/process_util.h"
6 6
7 #import <Cocoa/Cocoa.h> 7 #import <Cocoa/Cocoa.h>
8 #include <crt_externs.h> 8 #include <crt_externs.h>
9 #include <dlfcn.h> 9 #include <dlfcn.h>
10 #include <errno.h> 10 #include <errno.h>
(...skipping 818 matching lines...) Expand 10 before | Expand all | Expand 10 after
829 id oom_killer_allocWithZone(id self, SEL _cmd, NSZone* zone) 829 id oom_killer_allocWithZone(id self, SEL _cmd, NSZone* zone)
830 { 830 {
831 id result = g_old_allocWithZone(self, _cmd, zone); 831 id result = g_old_allocWithZone(self, _cmd, zone);
832 if (!result) 832 if (!result)
833 debug::BreakDebugger(); 833 debug::BreakDebugger();
834 return result; 834 return result;
835 } 835 }
836 836
837 } // namespace 837 } // namespace
838 838
839 malloc_zone_t* GetPurgeableZone() { 839 void* oom_safe_malloc(size_t size) {
840 // malloc_default_purgeable_zone only exists on >= 10.6. Use dlsym to grab it 840 if (g_old_malloc)
841 // at runtime because it may not be present in the SDK used for compilation. 841 return g_old_malloc(malloc_default_zone(), size);
842 typedef malloc_zone_t* (*malloc_default_purgeable_zone_t)(void); 842 return malloc(size);
843 malloc_default_purgeable_zone_t malloc_purgeable_zone =
844 reinterpret_cast<malloc_default_purgeable_zone_t>(
845 dlsym(RTLD_DEFAULT, "malloc_default_purgeable_zone"));
846 if (malloc_purgeable_zone)
847 return malloc_purgeable_zone();
848 return NULL;
Avi (use Gerrit) 2012/09/13 19:45:54 Thanks for removing this.
Scott Hess - ex-Googler 2012/09/13 20:04:00 Oops, added about this to the CL description.
849 } 843 }
850 844
851 void EnableTerminationOnOutOfMemory() { 845 void EnableTerminationOnOutOfMemory() {
852 if (g_oom_killer_enabled) 846 if (g_oom_killer_enabled)
853 return; 847 return;
854 848
855 g_oom_killer_enabled = true; 849 g_oom_killer_enabled = true;
856 850
857 // === C malloc/calloc/valloc/realloc/posix_memalign === 851 // === C malloc/calloc/valloc/realloc/posix_memalign ===
858 852
(...skipping 14 matching lines...) Expand all
873 #if !defined(ADDRESS_SANITIZER) 867 #if !defined(ADDRESS_SANITIZER)
874 // Don't do anything special on OOM for the malloc zones replaced by 868 // Don't do anything special on OOM for the malloc zones replaced by
875 // AddressSanitizer, as modifying or protecting them may not work correctly. 869 // AddressSanitizer, as modifying or protecting them may not work correctly.
876 870
877 // See http://trac.webkit.org/changeset/53362/trunk/Tools/DumpRenderTree/mac 871 // See http://trac.webkit.org/changeset/53362/trunk/Tools/DumpRenderTree/mac
878 bool zone_allocators_protected = base::mac::IsOSLionOrLater(); 872 bool zone_allocators_protected = base::mac::IsOSLionOrLater();
879 873
880 ChromeMallocZone* default_zone = 874 ChromeMallocZone* default_zone =
881 reinterpret_cast<ChromeMallocZone*>(malloc_default_zone()); 875 reinterpret_cast<ChromeMallocZone*>(malloc_default_zone());
882 ChromeMallocZone* purgeable_zone = 876 ChromeMallocZone* purgeable_zone =
883 reinterpret_cast<ChromeMallocZone*>(GetPurgeableZone()); 877 reinterpret_cast<ChromeMallocZone*>(malloc_default_purgeable_zone());
884 878
885 vm_address_t page_start_default = 0; 879 vm_address_t page_start_default = 0;
886 vm_address_t page_start_purgeable = 0; 880 vm_address_t page_start_purgeable = 0;
887 vm_size_t len_default = 0; 881 vm_size_t len_default = 0;
888 vm_size_t len_purgeable = 0; 882 vm_size_t len_purgeable = 0;
889 if (zone_allocators_protected) { 883 if (zone_allocators_protected) {
890 page_start_default = reinterpret_cast<vm_address_t>(default_zone) & 884 page_start_default = reinterpret_cast<vm_address_t>(default_zone) &
891 static_cast<vm_size_t>(~(getpagesize() - 1)); 885 static_cast<vm_size_t>(~(getpagesize() - 1));
892 len_default = reinterpret_cast<vm_address_t>(default_zone) - 886 len_default = reinterpret_cast<vm_address_t>(default_zone) -
893 page_start_default + sizeof(ChromeMallocZone); 887 page_start_default + sizeof(ChromeMallocZone);
(...skipping 315 matching lines...) Expand 10 before | Expand all | Expand 10 after
1209 } 1203 }
1210 } 1204 }
1211 1205
1212 } // namespace 1206 } // namespace
1213 1207
1214 void EnsureProcessTerminated(ProcessHandle process) { 1208 void EnsureProcessTerminated(ProcessHandle process) {
1215 WaitForChildToDie(process, kWaitBeforeKillSeconds); 1209 WaitForChildToDie(process, kWaitBeforeKillSeconds);
1216 } 1210 }
1217 1211
1218 } // namespace base 1212 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698