Mercurial > hg > truffle
comparison src/share/vm/runtime/os.hpp @ 10969:a837fa3d3f86
8013057: assert(_needs_gc || SafepointSynchronize::is_at_safepoint()) failed: only read at safepoint
Summary: Detect mmap() commit failures in Linux and Solaris os::commit_memory() impls and call vm_exit_out_of_memory(). Add os::commit_memory_or_exit(). Also tidy up some NMT accounting and some mmap() return value checking.
Reviewed-by: zgu, stefank, dholmes, dsamersoff
author | dcubed |
---|---|
date | Thu, 13 Jun 2013 11:16:38 -0700 |
parents | f2110083203d |
children | 59b052799158 980532a806a5 |
comparison
equal
deleted
inserted
replaced
10405:f2110083203d | 10969:a837fa3d3f86 |
---|---|
76 MaxPriority = 10, // Highest priority, used for WatcherThread | 76 MaxPriority = 10, // Highest priority, used for WatcherThread |
77 // ensures that VMThread doesn't starve profiler | 77 // ensures that VMThread doesn't starve profiler |
78 CriticalPriority = 11 // Critical thread priority | 78 CriticalPriority = 11 // Critical thread priority |
79 }; | 79 }; |
80 | 80 |
81 // Executable parameter flag for os::commit_memory() and | |
82 // os::commit_memory_or_exit(). | |
83 const bool ExecMem = true; | |
84 | |
81 // Typedef for structured exception handling support | 85 // Typedef for structured exception handling support |
82 typedef void (*java_call_t)(JavaValue* value, methodHandle* method, JavaCallArguments* args, Thread* thread); | 86 typedef void (*java_call_t)(JavaValue* value, methodHandle* method, JavaCallArguments* args, Thread* thread); |
83 | 87 |
84 class os: AllStatic { | 88 class os: AllStatic { |
85 public: | 89 public: |
102 static char* pd_reserve_memory(size_t bytes, char* addr = 0, | 106 static char* pd_reserve_memory(size_t bytes, char* addr = 0, |
103 size_t alignment_hint = 0); | 107 size_t alignment_hint = 0); |
104 static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr); | 108 static char* pd_attempt_reserve_memory_at(size_t bytes, char* addr); |
105 static void pd_split_reserved_memory(char *base, size_t size, | 109 static void pd_split_reserved_memory(char *base, size_t size, |
106 size_t split, bool realloc); | 110 size_t split, bool realloc); |
107 static bool pd_commit_memory(char* addr, size_t bytes, bool executable = false); | 111 static bool pd_commit_memory(char* addr, size_t bytes, bool executable); |
108 static bool pd_commit_memory(char* addr, size_t size, size_t alignment_hint, | 112 static bool pd_commit_memory(char* addr, size_t size, size_t alignment_hint, |
109 bool executable = false); | 113 bool executable); |
114 // Same as pd_commit_memory() that either succeeds or calls | |
115 // vm_exit_out_of_memory() with the specified mesg. | |
116 static void pd_commit_memory_or_exit(char* addr, size_t bytes, | |
117 bool executable, const char* mesg); | |
118 static void pd_commit_memory_or_exit(char* addr, size_t size, | |
119 size_t alignment_hint, | |
120 bool executable, const char* mesg); | |
110 static bool pd_uncommit_memory(char* addr, size_t bytes); | 121 static bool pd_uncommit_memory(char* addr, size_t bytes); |
111 static bool pd_release_memory(char* addr, size_t bytes); | 122 static bool pd_release_memory(char* addr, size_t bytes); |
112 | 123 |
113 static char* pd_map_memory(int fd, const char* file_name, size_t file_offset, | 124 static char* pd_map_memory(int fd, const char* file_name, size_t file_offset, |
114 char *addr, size_t bytes, bool read_only = false, | 125 char *addr, size_t bytes, bool read_only = false, |
259 size_t alignment_hint, MEMFLAGS flags); | 270 size_t alignment_hint, MEMFLAGS flags); |
260 static char* reserve_memory_aligned(size_t size, size_t alignment); | 271 static char* reserve_memory_aligned(size_t size, size_t alignment); |
261 static char* attempt_reserve_memory_at(size_t bytes, char* addr); | 272 static char* attempt_reserve_memory_at(size_t bytes, char* addr); |
262 static void split_reserved_memory(char *base, size_t size, | 273 static void split_reserved_memory(char *base, size_t size, |
263 size_t split, bool realloc); | 274 size_t split, bool realloc); |
264 static bool commit_memory(char* addr, size_t bytes, bool executable = false); | 275 static bool commit_memory(char* addr, size_t bytes, bool executable); |
265 static bool commit_memory(char* addr, size_t size, size_t alignment_hint, | 276 static bool commit_memory(char* addr, size_t size, size_t alignment_hint, |
266 bool executable = false); | 277 bool executable); |
278 // Same as commit_memory() that either succeeds or calls | |
279 // vm_exit_out_of_memory() with the specified mesg. | |
280 static void commit_memory_or_exit(char* addr, size_t bytes, | |
281 bool executable, const char* mesg); | |
282 static void commit_memory_or_exit(char* addr, size_t size, | |
283 size_t alignment_hint, | |
284 bool executable, const char* mesg); | |
267 static bool uncommit_memory(char* addr, size_t bytes); | 285 static bool uncommit_memory(char* addr, size_t bytes); |
268 static bool release_memory(char* addr, size_t bytes); | 286 static bool release_memory(char* addr, size_t bytes); |
269 | 287 |
270 enum ProtType { MEM_PROT_NONE, MEM_PROT_READ, MEM_PROT_RW, MEM_PROT_RWX }; | 288 enum ProtType { MEM_PROT_NONE, MEM_PROT_READ, MEM_PROT_RW, MEM_PROT_RWX }; |
271 static bool protect_memory(char* addr, size_t bytes, ProtType prot, | 289 static bool protect_memory(char* addr, size_t bytes, ProtType prot, |