--- old/jdk/src/java.management/share/native/libmanagement/Flag.c 2015-04-02 17:37:34.000000000 +0200 +++ /dev/null 2015-04-02 17:37:34.000000000 +0200 @@ -1,236 +0,0 @@ -/* - * Copyright (c) 2003, 2014, 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. Oracle designates this - * particular file as subject to the "Classpath" exception as provided - * by Oracle in the LICENSE file that accompanied this code. - * - * 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. - */ - -#include -#include -#include -#include -#include "management.h" -#include "sun_management_Flag.h" - -static jobject default_origin = NULL; -static jobject vm_creation_origin = NULL; -static jobject mgmt_origin = NULL; -static jobject envvar_origin = NULL; -static jobject config_file_origin = NULL; -static jobject ergo_origin = NULL; -static jobject attach_origin = NULL; -static jobject other_origin = NULL; - -JNIEXPORT jint JNICALL -Java_sun_management_Flag_getInternalFlagCount - (JNIEnv *env, jclass cls) -{ - jlong count = jmm_interface->GetLongAttribute(env, NULL, - JMM_VM_GLOBAL_COUNT); - return (jint) count; -} - -JNIEXPORT jobjectArray JNICALL - Java_sun_management_Flag_getAllFlagNames -(JNIEnv *env, jclass cls) -{ - return jmm_interface->GetVMGlobalNames(env); -} - -static jobject find_origin_constant(JNIEnv* env, const char* enum_name) { - jvalue field; - field = JNU_GetStaticFieldByName(env, - NULL, - "com/sun/management/VMOption$Origin", - enum_name, - "Lcom/sun/management/VMOption$Origin;"); - return (*env)->NewGlobalRef(env, field.l); -} - -JNIEXPORT void JNICALL -Java_sun_management_Flag_initialize - (JNIEnv *env, jclass cls) -{ - default_origin = find_origin_constant(env, "DEFAULT"); - vm_creation_origin = find_origin_constant(env, "VM_CREATION"); - mgmt_origin = find_origin_constant(env, "MANAGEMENT"); - envvar_origin = find_origin_constant(env, "ENVIRON_VAR"); - config_file_origin = find_origin_constant(env, "CONFIG_FILE"); - ergo_origin = find_origin_constant(env, "ERGONOMIC"); - attach_origin = find_origin_constant(env, "ATTACH_ON_DEMAND"); - other_origin = find_origin_constant(env, "OTHER"); -} - -JNIEXPORT jint JNICALL -Java_sun_management_Flag_getFlags - (JNIEnv *env, jclass cls, jobjectArray names, jobjectArray flags, jint count) -{ - jint num_flags, i, index; - jmmVMGlobal* globals; - size_t gsize; - const char* class_name = "sun/management/Flag"; - const char* signature = "(Ljava/lang/String;Ljava/lang/Object;ZZLcom/sun/management/VMOption$Origin;)V"; - jobject origin; - jobject valueObj; - jobject flag; - - if (flags == NULL) { - JNU_ThrowNullPointerException(env, 0); - return 0; - } - - if (count <= 0) { - JNU_ThrowIllegalArgumentException(env, 0); - return 0; - } - - gsize = (size_t)count * sizeof(jmmVMGlobal); - globals = (jmmVMGlobal*) malloc(gsize); - if (globals == NULL) { - JNU_ThrowOutOfMemoryError(env, 0); - return 0; - } - - memset(globals, 0, gsize); - num_flags = jmm_interface->GetVMGlobals(env, names, globals, count); - if (num_flags == 0) { - free(globals); - return 0; - } - - index = 0; - for (i = 0; i < count; i++) { - if (globals[i].name == NULL) { - continue; - } - switch (globals[i].type) { - case JMM_VMGLOBAL_TYPE_JBOOLEAN: - valueObj = JNU_NewObjectByName(env, "java/lang/Boolean", "(Z)V", - globals[i].value.z); - break; - case JMM_VMGLOBAL_TYPE_JSTRING: - valueObj = globals[i].value.l; - break; - case JMM_VMGLOBAL_TYPE_JLONG: - valueObj = JNU_NewObjectByName(env, "java/lang/Long", "(J)V", - globals[i].value.j); - break; - case JMM_VMGLOBAL_TYPE_JDOUBLE: - valueObj = JNU_NewObjectByName(env, "java/lang/Double", "(D)V", - globals[i].value.d); - break; - default: - // ignore unsupported type - continue; - } - switch (globals[i].origin) { - case JMM_VMGLOBAL_ORIGIN_DEFAULT: - origin = default_origin; - break; - case JMM_VMGLOBAL_ORIGIN_COMMAND_LINE: - origin = vm_creation_origin; - break; - case JMM_VMGLOBAL_ORIGIN_MANAGEMENT: - origin = mgmt_origin; - break; - case JMM_VMGLOBAL_ORIGIN_ENVIRON_VAR: - origin = envvar_origin; - break; - case JMM_VMGLOBAL_ORIGIN_CONFIG_FILE: - origin = config_file_origin; - break; - case JMM_VMGLOBAL_ORIGIN_ERGONOMIC: - origin = ergo_origin; - break; - case JMM_VMGLOBAL_ORIGIN_ATTACH_ON_DEMAND: - origin = attach_origin; - break; - case JMM_VMGLOBAL_ORIGIN_OTHER: - origin = other_origin; - break; - default: - // unknown origin - origin = other_origin; - break; - } - flag = JNU_NewObjectByName(env, class_name, signature, globals[i].name, - valueObj, globals[i].writeable, - globals[i].external, origin); - if (flag == NULL) { - free(globals); - JNU_ThrowOutOfMemoryError(env, 0); - return 0; - } - (*env)->SetObjectArrayElement(env, flags, index, flag); - index++; - } - - if (index != num_flags) { - JNU_ThrowInternalError(env, "Number of Flag objects created unmatched"); - free(globals); - return 0; - } - - free(globals); - - /* return the number of Flag objects created */ - return num_flags; -} - -JNIEXPORT void JNICALL -Java_sun_management_Flag_setLongValue - (JNIEnv *env, jclass cls, jstring name, jlong value) -{ - jvalue v; - v.j = value; - - jmm_interface->SetVMGlobal(env, name, v); -} - -JNIEXPORT void JNICALL -Java_sun_management_Flag_setDoubleValue - (JNIEnv *env, jclass cls, jstring name, jdouble value) -{ - jvalue v; - v.d = value; - - jmm_interface->SetVMGlobal(env, name, v); -} - -JNIEXPORT void JNICALL -Java_sun_management_Flag_setBooleanValue - (JNIEnv *env, jclass cls, jstring name, jboolean value) -{ - jvalue v; - v.z = value; - - jmm_interface->SetVMGlobal(env, name, v); -} - -JNIEXPORT void JNICALL -Java_sun_management_Flag_setStringValue - (JNIEnv *env, jclass cls, jstring name, jstring value) -{ - jvalue v; - v.l = value; - - jmm_interface->SetVMGlobal(env, name, v); -} --- /dev/null 2015-04-02 17:37:34.000000000 +0200 +++ new/jdk/src/jdk.management/share/native/libmanagement_ext/Flag.c 2015-04-02 17:37:33.000000000 +0200 @@ -0,0 +1,236 @@ +/* + * Copyright (c) 2003, 2015, 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. Oracle designates this + * particular file as subject to the "Classpath" exception as provided + * by Oracle in the LICENSE file that accompanied this code. + * + * 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. + */ + +#include +#include +#include +#include +#include "management_ext.h" +#include "com_sun_management_internal_Flag.h" + +static jobject default_origin = NULL; +static jobject vm_creation_origin = NULL; +static jobject mgmt_origin = NULL; +static jobject envvar_origin = NULL; +static jobject config_file_origin = NULL; +static jobject ergo_origin = NULL; +static jobject attach_origin = NULL; +static jobject other_origin = NULL; + +JNIEXPORT jint JNICALL +Java_com_sun_management_internal_Flag_getInternalFlagCount + (JNIEnv *env, jclass cls) +{ + jlong count = jmm_interface->GetLongAttribute(env, NULL, + JMM_VM_GLOBAL_COUNT); + return (jint) count; +} + +JNIEXPORT jobjectArray JNICALL + Java_com_sun_management_internal_Flag_getAllFlagNames +(JNIEnv *env, jclass cls) +{ + return jmm_interface->GetVMGlobalNames(env); +} + +static jobject find_origin_constant(JNIEnv* env, const char* enum_name) { + jvalue field; + field = JNU_GetStaticFieldByName(env, + NULL, + "com/sun/management/VMOption$Origin", + enum_name, + "Lcom/sun/management/VMOption$Origin;"); + return (*env)->NewGlobalRef(env, field.l); +} + +JNIEXPORT void JNICALL +Java_com_sun_management_internal_Flag_initialize + (JNIEnv *env, jclass cls) +{ + default_origin = find_origin_constant(env, "DEFAULT"); + vm_creation_origin = find_origin_constant(env, "VM_CREATION"); + mgmt_origin = find_origin_constant(env, "MANAGEMENT"); + envvar_origin = find_origin_constant(env, "ENVIRON_VAR"); + config_file_origin = find_origin_constant(env, "CONFIG_FILE"); + ergo_origin = find_origin_constant(env, "ERGONOMIC"); + attach_origin = find_origin_constant(env, "ATTACH_ON_DEMAND"); + other_origin = find_origin_constant(env, "OTHER"); +} + +JNIEXPORT jint JNICALL +Java_com_sun_management_internal_Flag_getFlags + (JNIEnv *env, jclass cls, jobjectArray names, jobjectArray flags, jint count) +{ + jint num_flags, i, index; + jmmVMGlobal* globals; + size_t gsize; + const char* class_name = "com/sun/management/internal/Flag"; + const char* signature = "(Ljava/lang/String;Ljava/lang/Object;ZZLcom/sun/management/VMOption$Origin;)V"; + jobject origin; + jobject valueObj; + jobject flag; + + if (flags == NULL) { + JNU_ThrowNullPointerException(env, 0); + return 0; + } + + if (count <= 0) { + JNU_ThrowIllegalArgumentException(env, 0); + return 0; + } + + gsize = (size_t)count * sizeof(jmmVMGlobal); + globals = (jmmVMGlobal*) malloc(gsize); + if (globals == NULL) { + JNU_ThrowOutOfMemoryError(env, 0); + return 0; + } + + memset(globals, 0, gsize); + num_flags = jmm_interface->GetVMGlobals(env, names, globals, count); + if (num_flags == 0) { + free(globals); + return 0; + } + + index = 0; + for (i = 0; i < count; i++) { + if (globals[i].name == NULL) { + continue; + } + switch (globals[i].type) { + case JMM_VMGLOBAL_TYPE_JBOOLEAN: + valueObj = JNU_NewObjectByName(env, "java/lang/Boolean", "(Z)V", + globals[i].value.z); + break; + case JMM_VMGLOBAL_TYPE_JSTRING: + valueObj = globals[i].value.l; + break; + case JMM_VMGLOBAL_TYPE_JLONG: + valueObj = JNU_NewObjectByName(env, "java/lang/Long", "(J)V", + globals[i].value.j); + break; + case JMM_VMGLOBAL_TYPE_JDOUBLE: + valueObj = JNU_NewObjectByName(env, "java/lang/Double", "(D)V", + globals[i].value.d); + break; + default: + // ignore unsupported type + continue; + } + switch (globals[i].origin) { + case JMM_VMGLOBAL_ORIGIN_DEFAULT: + origin = default_origin; + break; + case JMM_VMGLOBAL_ORIGIN_COMMAND_LINE: + origin = vm_creation_origin; + break; + case JMM_VMGLOBAL_ORIGIN_MANAGEMENT: + origin = mgmt_origin; + break; + case JMM_VMGLOBAL_ORIGIN_ENVIRON_VAR: + origin = envvar_origin; + break; + case JMM_VMGLOBAL_ORIGIN_CONFIG_FILE: + origin = config_file_origin; + break; + case JMM_VMGLOBAL_ORIGIN_ERGONOMIC: + origin = ergo_origin; + break; + case JMM_VMGLOBAL_ORIGIN_ATTACH_ON_DEMAND: + origin = attach_origin; + break; + case JMM_VMGLOBAL_ORIGIN_OTHER: + origin = other_origin; + break; + default: + // unknown origin + origin = other_origin; + break; + } + flag = JNU_NewObjectByName(env, class_name, signature, globals[i].name, + valueObj, globals[i].writeable, + globals[i].external, origin); + if (flag == NULL) { + free(globals); + JNU_ThrowOutOfMemoryError(env, 0); + return 0; + } + (*env)->SetObjectArrayElement(env, flags, index, flag); + index++; + } + + if (index != num_flags) { + JNU_ThrowInternalError(env, "Number of Flag objects created unmatched"); + free(globals); + return 0; + } + + free(globals); + + /* return the number of Flag objects created */ + return num_flags; +} + +JNIEXPORT void JNICALL +Java_com_sun_management_internal_Flag_setLongValue + (JNIEnv *env, jclass cls, jstring name, jlong value) +{ + jvalue v; + v.j = value; + + jmm_interface->SetVMGlobal(env, name, v); +} + +JNIEXPORT void JNICALL +Java_com_sun_management_internal_Flag_setDoubleValue + (JNIEnv *env, jclass cls, jstring name, jdouble value) +{ + jvalue v; + v.d = value; + + jmm_interface->SetVMGlobal(env, name, v); +} + +JNIEXPORT void JNICALL +Java_com_sun_management_internal_Flag_setBooleanValue + (JNIEnv *env, jclass cls, jstring name, jboolean value) +{ + jvalue v; + v.z = value; + + jmm_interface->SetVMGlobal(env, name, v); +} + +JNIEXPORT void JNICALL +Java_com_sun_management_internal_Flag_setStringValue + (JNIEnv *env, jclass cls, jstring name, jstring value) +{ + jvalue v; + v.l = value; + + jmm_interface->SetVMGlobal(env, name, v); +}