Mercurial > hg > truffle
view agent/src/share/classes/sun/jvm/hotspot/runtime/ClassConstants.java @ 17716:cdb71841f4bc
6498581: ThreadInterruptTest3 produces wrong output on Windows
Summary: There is race condition between os::interrupt and os::is_interrupted on Windows. In JVM_Sleep(Thread.sleep), check if thread gets interrupted, it may see interrupted but not really interrupted so cause spurious waking up (early return from sleep). Fix by checking if interrupt event really gets set thus prevent false return. For intrinsic of _isInterrupted, on Windows, go fastpath only on bit not set.
Reviewed-by: acorn, kvn
Contributed-by: david.holmes@oracle.com, yumin.qi@oracle.com
author | minqi |
---|---|
date | Wed, 26 Feb 2014 15:20:41 -0800 |
parents | f16e75e0cf11 |
children |
line wrap: on
line source
/* * Copyright (c) 2002, 2013, Oracle and/or its affiliates. All rights reserved. * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. * * This code is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License version 2 only, as * published by the Free Software Foundation. * * This code is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License * version 2 for more details (a copy is included in the LICENSE file that * accompanied this code). * * You should have received a copy of the GNU General Public License version * 2 along with this work; if not, write to the Free Software Foundation, * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. * * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA * or visit www.oracle.com if you need additional information or have any * questions. * */ package sun.jvm.hotspot.runtime; public interface ClassConstants { // constant pool constant types - from JVM spec. public static final int JVM_CONSTANT_Utf8 = 1; public static final int JVM_CONSTANT_Unicode = 2; // unused public static final int JVM_CONSTANT_Integer = 3; public static final int JVM_CONSTANT_Float = 4; public static final int JVM_CONSTANT_Long = 5; public static final int JVM_CONSTANT_Double = 6; public static final int JVM_CONSTANT_Class = 7; public static final int JVM_CONSTANT_String = 8; public static final int JVM_CONSTANT_Fieldref = 9; public static final int JVM_CONSTANT_Methodref = 10; public static final int JVM_CONSTANT_InterfaceMethodref = 11; public static final int JVM_CONSTANT_NameAndType = 12; public static final int JVM_CONSTANT_MethodHandle = 15; public static final int JVM_CONSTANT_MethodType = 16; // static final int JVM_CONSTANT_(unused) = 17; public static final int JVM_CONSTANT_InvokeDynamic = 18; // JVM_CONSTANT_MethodHandle subtypes public static final int JVM_REF_getField = 1; public static final int JVM_REF_getStatic = 2; public static final int JVM_REF_putField = 3; public static final int JVM_REF_putStatic = 4; public static final int JVM_REF_invokeVirtual = 5; public static final int JVM_REF_invokeStatic = 6; public static final int JVM_REF_invokeSpecial = 7; public static final int JVM_REF_newInvokeSpecial = 8; public static final int JVM_REF_invokeInterface = 9; // HotSpot specific constant pool constant types. // For bad value initialization public static final int JVM_CONSTANT_Invalid = 0; public static final int JVM_CONSTANT_UnresolvedClass = 100; // Temporary tag until actual use public static final int JVM_CONSTANT_ClassIndex = 101; // Temporary tag while constructing constant pool public static final int JVM_CONSTANT_StringIndex = 102; // Temporary tag while constructing constant pool public static final int JVM_CONSTANT_UnresolvedClassInError = 103; // Error tag due to resolution error public static final int JVM_CONSTANT_MethodHandleInError = 104; // Error tag due to resolution error public static final int JVM_CONSTANT_MethodTypeInError = 105; // Error tag due to resolution error // 1.5 major/minor version numbers from JVM spec. 3rd edition public static final short MAJOR_VERSION = 49; public static final short MINOR_VERSION = 0; public static final short MAJOR_VERSION_OLD = 46; public static final short MINOR_VERSION_OLD = 0; // From jvm.h public static final long JVM_ACC_PUBLIC = 0x0001; /* visible to everyone */ public static final long JVM_ACC_PRIVATE = 0x0002; /* visible only to the defining class */ public static final long JVM_ACC_PROTECTED = 0x0004; /* visible to subclasses */ public static final long JVM_ACC_STATIC = 0x0008; /* instance variable is static */ public static final long JVM_ACC_FINAL = 0x0010; /* no further subclassing, overriding */ public static final long JVM_ACC_SYNCHRONIZED = 0x0020; /* wrap method call in monitor lock */ public static final long JVM_ACC_SUPER = 0x0020; /* funky handling of invokespecial */ public static final long JVM_ACC_VOLATILE = 0x0040; /* can not cache in registers */ public static final long JVM_ACC_BRIDGE = 0x0040; /* bridge method generated by compiler */ public static final long JVM_ACC_TRANSIENT = 0x0080; /* not persistant */ public static final long JVM_ACC_VARARGS = 0x0080; /* method declared with variable number of args */ public static final long JVM_ACC_NATIVE = 0x0100; /* implemented in C */ public static final long JVM_ACC_INTERFACE = 0x0200; /* class is an interface */ public static final long JVM_ACC_ABSTRACT = 0x0400; /* no definition provided */ public static final long JVM_ACC_STRICT = 0x0800; /* strict floating point */ public static final long JVM_ACC_SYNTHETIC = 0x1000; /* compiler-generated class, method or field */ public static final long JVM_ACC_ANNOTATION = 0x2000; /* annotation type */ public static final long JVM_ACC_ENUM = 0x4000; /* field is declared as element of enum */ // from accessFlags.hpp - hotspot internal flags // flags actually put in .class file public static final long JVM_ACC_WRITTEN_FLAGS = 0x00007FFF; // Method* flags // monitorenter/monitorexit bytecodes match public static final long JVM_ACC_MONITOR_MATCH = 0x10000000; // Method contains monitorenter/monitorexit bytecodes public static final long JVM_ACC_HAS_MONITOR_BYTECODES = 0x20000000; // Method has loops public static final long JVM_ACC_HAS_LOOPS = 0x40000000; // The loop flag has been initialized public static final long JVM_ACC_LOOPS_FLAG_INIT = (int)0x80000000; // Queued for compilation public static final long JVM_ACC_QUEUED = 0x01000000; // TEMPORARY: currently on stack replacement compilation is not built into the // invocation counter machinery. Until it is, we will keep track of methods which // cannot be on stack replaced in the access flags. public static final long JVM_ACC_NOT_OSR_COMPILABLE = 0x08000000; public static final long JVM_ACC_HAS_LINE_NUMBER_TABLE = 0x00100000; public static final long JVM_ACC_HAS_CHECKED_EXCEPTIONS = 0x00400000; public static final long JVM_ACC_HAS_JSRS = 0x00800000; // RedefineClasses() has made method obsolete public static final long JVM_ACC_IS_OBSOLETE = 0x00010000; // Klass* flags // True if this class has miranda methods in it's vtable public static final long JVM_ACC_HAS_MIRANDA_METHODS = 0x10000000; // True if klass has a vanilla default constructor public static final long JVM_ACC_HAS_VANILLA_CONSTRUCTOR = 0x20000000; // True if klass has a non-empty finalize() method public static final long JVM_ACC_HAS_FINALIZER = 0x40000000; // True if klass supports the Clonable interface public static final long JVM_ACC_IS_CLONEABLE = 0x80000000; // Klass* and Method* flags public static final long JVM_ACC_HAS_LOCAL_VARIABLE_TABLE = 0x00200000; // flags promoted from methods to the holding klass public static final long JVM_ACC_PROMOTED_FLAGS = 0x00200000; // field flags // Note: these flags must be defined in the low order 16 bits because // InstanceKlass only stores a ushort worth of information from the // AccessFlags value. // field access is watched by JVMTI public static final long JVM_ACC_FIELD_ACCESS_WATCHED = 0x00002000; // field modification is watched by JVMTI public static final long JVM_ACC_FIELD_MODIFICATION_WATCHED = 0x00008000; // field has generic signature public static final long JVM_ACC_FIELD_HAS_GENERIC_SIGNATURE = 0x00000800; // flags accepted by set_field_flags public static final long JVM_ACC_FIELD_FLAGS = 0x00008000 | JVM_ACC_WRITTEN_FLAGS; // from jvm.h public static final long JVM_RECOGNIZED_CLASS_MODIFIERS = (JVM_ACC_PUBLIC | JVM_ACC_FINAL | JVM_ACC_SUPER | JVM_ACC_INTERFACE | JVM_ACC_ABSTRACT | JVM_ACC_ANNOTATION | JVM_ACC_ENUM | JVM_ACC_SYNTHETIC); public static final long JVM_RECOGNIZED_FIELD_MODIFIERS = (JVM_ACC_PUBLIC | JVM_ACC_PRIVATE | JVM_ACC_PROTECTED | JVM_ACC_STATIC | JVM_ACC_FINAL | JVM_ACC_VOLATILE | JVM_ACC_TRANSIENT | JVM_ACC_ENUM | JVM_ACC_SYNTHETIC); public static final long JVM_RECOGNIZED_METHOD_MODIFIERS = (JVM_ACC_PUBLIC | JVM_ACC_PRIVATE | JVM_ACC_PROTECTED | JVM_ACC_STATIC | JVM_ACC_FINAL | JVM_ACC_SYNCHRONIZED | JVM_ACC_BRIDGE | JVM_ACC_VARARGS | JVM_ACC_NATIVE | JVM_ACC_ABSTRACT | JVM_ACC_STRICT | JVM_ACC_SYNTHETIC); }