stefank@4299: /* stefank@4299: * Copyright (c) 2012, Oracle and/or its affiliates. All rights reserved. stefank@4299: * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. stefank@4299: * stefank@4299: * This code is free software; you can redistribute it and/or modify it stefank@4299: * under the terms of the GNU General Public License version 2 only, as stefank@4299: * published by the Free Software Foundation. stefank@4299: * stefank@4299: * This code is distributed in the hope that it will be useful, but WITHOUT stefank@4299: * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or stefank@4299: * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License stefank@4299: * version 2 for more details (a copy is included in the LICENSE file that stefank@4299: * accompanied this code). stefank@4299: * stefank@4299: * You should have received a copy of the GNU General Public License version stefank@4299: * 2 along with this work; if not, write to the Free Software Foundation, stefank@4299: * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. stefank@4299: * stefank@4299: * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA stefank@4299: * or visit www.oracle.com if you need additional information or have any stefank@4299: * questions. stefank@4299: * stefank@4299: */ stefank@4299: stefank@4299: #ifndef SHARE_VM_RUNTIME_THREAD_INLINE_HPP stefank@4299: #define SHARE_VM_RUNTIME_THREAD_INLINE_HPP stefank@4299: stefank@4299: #define SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE stefank@4299: stefank@4299: #include "runtime/thread.hpp" stefank@4299: #ifdef TARGET_OS_FAMILY_linux stefank@4299: # include "thread_linux.inline.hpp" stefank@4299: #endif stefank@4299: #ifdef TARGET_OS_FAMILY_solaris stefank@4299: # include "thread_solaris.inline.hpp" stefank@4299: #endif stefank@4299: #ifdef TARGET_OS_FAMILY_windows stefank@4299: # include "thread_windows.inline.hpp" stefank@4299: #endif goetz@6461: #ifdef TARGET_OS_FAMILY_aix goetz@6461: # include "thread_aix.inline.hpp" goetz@6461: #endif stefank@4299: #ifdef TARGET_OS_FAMILY_bsd stefank@4299: # include "thread_bsd.inline.hpp" stefank@4299: #endif stefank@4299: stefank@4299: #undef SHARE_VM_RUNTIME_THREAD_INLINE_HPP_SCOPE stefank@4299: goetz@6911: inline jlong Thread::cooked_allocated_bytes() { goetz@6911: jlong allocated_bytes = OrderAccess::load_acquire(&_allocated_bytes); goetz@6911: if (UseTLAB) { goetz@6911: size_t used_bytes = tlab().used_bytes(); goetz@6911: if ((ssize_t)used_bytes > 0) { goetz@6911: // More-or-less valid tlab. The load_acquire above should ensure goetz@6911: // that the result of the add is <= the instantaneous value. goetz@6911: return allocated_bytes + used_bytes; goetz@6911: } goetz@6911: } goetz@6911: return allocated_bytes; goetz@6911: } goetz@6911: goetz@6911: #ifdef PPC64 goetz@6911: inline JavaThreadState JavaThread::thread_state() const { goetz@6911: return (JavaThreadState) OrderAccess::load_acquire((volatile jint*)&_thread_state); goetz@6911: } goetz@6911: goetz@6911: inline void JavaThread::set_thread_state(JavaThreadState s) { goetz@6911: OrderAccess::release_store((volatile jint*)&_thread_state, (jint)s); goetz@6911: } goetz@6911: #endif goetz@6911: goetz@6911: inline void JavaThread::set_done_attaching_via_jni() { goetz@6911: _jni_attach_state = _attached_via_jni; goetz@6911: OrderAccess::fence(); goetz@6911: } goetz@6911: stefank@4299: #endif // SHARE_VM_RUNTIME_THREAD_INLINE_HPP