src/share/vm/runtime/thread.inline.hpp

Tue, 29 Apr 2014 15:17:27 +0200

author
goetz
date
Tue, 29 Apr 2014 15:17:27 +0200
changeset 6911
ce8f6bb717c9
parent 6461
bdd155477289
child 7535
7ae4e26cb1e0
permissions
-rw-r--r--

8042195: Introduce umbrella header orderAccess.inline.hpp.
Reviewed-by: dholmes, kvn, stefank, twisti

stefank@4299 1 /*
stefank@4299 2 * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved.
stefank@4299 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
stefank@4299 4 *
stefank@4299 5 * This code is free software; you can redistribute it and/or modify it
stefank@4299 6 * under the terms of the GNU General Public License version 2 only, as
stefank@4299 7 * published by the Free Software Foundation.
stefank@4299 8 *
stefank@4299 9 * This code is distributed in the hope that it will be useful, but WITHOUT
stefank@4299 10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
stefank@4299 11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
stefank@4299 12 * version 2 for more details (a copy is included in the LICENSE file that
stefank@4299 13 * accompanied this code).
stefank@4299 14 *
stefank@4299 15 * You should have received a copy of the GNU General Public License version
stefank@4299 16 * 2 along with this work; if not, write to the Free Software Foundation,
stefank@4299 17 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
stefank@4299 18 *
stefank@4299 19 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
stefank@4299 20 * or visit www.oracle.com if you need additional information or have any
stefank@4299 21 * questions.
stefank@4299 22 *
stefank@4299 23 */
stefank@4299 24
stefank@4299 25 #ifndef SHARE_VM_RUNTIME_THREAD_INLINE_HPP
stefank@4299 26 #define SHARE_VM_RUNTIME_THREAD_INLINE_HPP
stefank@4299 27
stefank@4299 28 #define SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE
stefank@4299 29
stefank@4299 30 #include "runtime/thread.hpp"
stefank@4299 31 #ifdef TARGET_OS_FAMILY_linux
stefank@4299 32 # include "thread_linux.inline.hpp"
stefank@4299 33 #endif
stefank@4299 34 #ifdef TARGET_OS_FAMILY_solaris
stefank@4299 35 # include "thread_solaris.inline.hpp"
stefank@4299 36 #endif
stefank@4299 37 #ifdef TARGET_OS_FAMILY_windows
stefank@4299 38 # include "thread_windows.inline.hpp"
stefank@4299 39 #endif
goetz@6461 40 #ifdef TARGET_OS_FAMILY_aix
goetz@6461 41 # include "thread_aix.inline.hpp"
goetz@6461 42 #endif
stefank@4299 43 #ifdef TARGET_OS_FAMILY_bsd
stefank@4299 44 # include "thread_bsd.inline.hpp"
stefank@4299 45 #endif
stefank@4299 46
stefank@4299 47 #undef SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE
stefank@4299 48
goetz@6911 49 inline jlong Thread::cooked_allocated_bytes() {
goetz@6911 50 jlong allocated_bytes = OrderAccess::load_acquire(&_allocated_bytes);
goetz@6911 51 if (UseTLAB) {
goetz@6911 52 size_t used_bytes = tlab().used_bytes();
goetz@6911 53 if ((ssize_t)used_bytes > 0) {
goetz@6911 54 // More-or-less valid tlab. The load_acquire above should ensure
goetz@6911 55 // that the result of the add is <= the instantaneous value.
goetz@6911 56 return allocated_bytes + used_bytes;
goetz@6911 57 }
goetz@6911 58 }
goetz@6911 59 return allocated_bytes;
goetz@6911 60 }
goetz@6911 61
goetz@6911 62 #ifdef PPC64
goetz@6911 63 inline JavaThreadState JavaThread::thread_state() const {
goetz@6911 64 return (JavaThreadState) OrderAccess::load_acquire((volatile jint*)&_thread_state);
goetz@6911 65 }
goetz@6911 66
goetz@6911 67 inline void JavaThread::set_thread_state(JavaThreadState s) {
goetz@6911 68 OrderAccess::release_store((volatile jint*)&_thread_state, (jint)s);
goetz@6911 69 }
goetz@6911 70 #endif
goetz@6911 71
goetz@6911 72 inline void JavaThread::set_done_attaching_via_jni() {
goetz@6911 73 _jni_attach_state = _attached_via_jni;
goetz@6911 74 OrderAccess::fence();
goetz@6911 75 }
goetz@6911 76
stefank@4299 77 #endif // SHARE_VM_RUNTIME_THREAD_INLINE_HPP

mercurial