Mercurial > hg > truffle
comparison src/share/vm/utilities/debug.cpp @ 8124:5fc51c1ecdeb
Merge.
author | Thomas Wuerthinger <thomas.wuerthinger@oracle.com> |
---|---|
date | Tue, 05 Mar 2013 23:44:54 +0100 |
parents | 989155e2d07a b6d5b3e50379 |
children | b8f261ba79c6 |
comparison
equal
deleted
inserted
replaced
7943:a413bcd552a4 | 8124:5fc51c1ecdeb |
---|---|
1 /* | 1 /* |
2 * Copyright (c) 1997, 2012, Oracle and/or its affiliates. All rights reserved. | 2 * Copyright (c) 1997, 2013, Oracle and/or its affiliates. All rights reserved. |
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. | 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
4 * | 4 * |
5 * This code is free software; you can redistribute it and/or modify it | 5 * This code is free software; you can redistribute it and/or modify it |
6 * under the terms of the GNU General Public License version 2 only, as | 6 * under the terms of the GNU General Public License version 2 only, as |
7 * published by the Free Software Foundation. | 7 * published by the Free Software Foundation. |
226 void report_fatal(const char* file, int line, const char* message) | 226 void report_fatal(const char* file, int line, const char* message) |
227 { | 227 { |
228 report_vm_error(file, line, "fatal error", message); | 228 report_vm_error(file, line, "fatal error", message); |
229 } | 229 } |
230 | 230 |
231 // Used by report_vm_out_of_memory to detect recursion. | |
232 static jint _exiting_out_of_mem = 0; | |
233 | |
234 void report_vm_out_of_memory(const char* file, int line, size_t size, | 231 void report_vm_out_of_memory(const char* file, int line, size_t size, |
235 const char* message) { | 232 const char* message) { |
236 if (Debugging) return; | 233 if (Debugging) return; |
237 | 234 |
238 // We try to gather additional information for the first out of memory | 235 Thread* thread = ThreadLocalStorage::get_thread_slow(); |
239 // error only; gathering additional data might cause an allocation and a | 236 VMError(thread, file, line, size, message).report_and_die(); |
240 // recursive out_of_memory condition. | 237 |
241 | 238 // The UseOSErrorReporting option in report_and_die() may allow a return |
242 const jint exiting = 1; | 239 // to here. If so then we'll have to figure out how to handle it. |
243 // If we succeed in changing the value, we're the first one in. | 240 guarantee(false, "report_and_die() should not return here"); |
244 bool first_time_here = Atomic::xchg(exiting, &_exiting_out_of_mem) != exiting; | |
245 | |
246 if (first_time_here) { | |
247 Thread* thread = ThreadLocalStorage::get_thread_slow(); | |
248 VMError(thread, file, line, size, message).report_and_die(); | |
249 } | |
250 | |
251 // Dump core and abort | |
252 vm_abort(true); | |
253 } | 241 } |
254 | 242 |
255 void report_should_not_call(const char* file, int line) { | 243 void report_should_not_call(const char* file, int line) { |
256 report_vm_error(file, line, "ShouldNotCall()"); | 244 report_vm_error(file, line, "ShouldNotCall()"); |
257 } | 245 } |