test/hotspot/jtreg/serviceability/jvmti/FieldAccessWatch/libFieldAccessWatch.c
author amenkov
Mon, 12 Mar 2018 14:11:54 -0700
changeset 49379 2d1d0c66966b
child 49740 4062c2c5f7d7
permissions -rw-r--r--
8193369: post_field_access does not work for some functions, possibly related to fast_getfield Reviewed-by: sspitsyn, cjplummer
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
49379
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
     1
/*
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
     2
 * Copyright (c) 2018, Oracle and/or its affiliates. All rights reserved.
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
     4
 *
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
     7
 * published by the Free Software Foundation.
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
     8
 *
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    13
 * accompanied this code).
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    14
 *
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    18
 *
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    21
 * questions.
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    22
 */
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    23
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    24
#include <stdio.h>
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    25
#include <string.h>
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    26
#include <stdlib.h>
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    27
#include "jvmti.h"
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    28
#include "jni.h"
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    29
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    30
#ifdef __cplusplus
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    31
extern "C" {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    32
#endif
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    33
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    34
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    35
static jvmtiEnv *jvmti = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    36
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    37
// valid while a test is executed
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    38
static JNIEnv *javaEnv = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    39
static jobject testResultObject = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    40
static jclass testResultClass = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    41
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    42
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    43
static void reportError(const char *msg, int err) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    44
    printf("%s, error: %d\n", msg, err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    45
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    46
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    47
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    48
// logs the notification and updates currentTestResult
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    49
static void handleNotification(jmethodID method,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    50
    jfieldID field,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    51
    jclass field_klass,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    52
    int modified,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    53
    jlocation location)
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    54
{
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    55
    jvmtiError err;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    56
    char *name = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    57
    char *mname = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    58
    char *mgensig = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    59
    jclass methodClass = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    60
    char *csig = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    61
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    62
    if (testResultObject == NULL) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    63
        // we are out of test
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    64
        return;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    65
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    66
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    67
    err = (*jvmti)->GetFieldName(jvmti, field_klass, field, &name, NULL, NULL);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    68
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    69
        reportError("GetFieldName failed", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    70
        return;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    71
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    72
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    73
    err = (*jvmti)->GetMethodName(jvmti, method, &mname, NULL, &mgensig);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    74
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    75
        reportError("GetMethodName failed", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    76
        return;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    77
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    78
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    79
    err = (*jvmti)->GetMethodDeclaringClass(jvmti, method, &methodClass);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    80
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    81
        reportError("GetMethodDeclaringClass failed", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    82
        return;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    83
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    84
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    85
    err = (*jvmti)->GetClassSignature(jvmti, methodClass, &csig, NULL);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    86
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    87
        reportError("GetClassSignature failed", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    88
        return;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    89
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    90
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    91
    printf("\"class: %s method: %s%s\" %s field: \"%s\", location: %d\n",
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    92
        csig, mname, mgensig, modified ? "modified" : "accessed", name, (int)location);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    93
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    94
    // set TestResult
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    95
    if (javaEnv != NULL && testResultObject != NULL && testResultClass != NULL) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    96
        jfieldID fieldID;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    97
        // field names in TestResult are "<field_name>_access"/"<field_name>_modify"
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    98
        char *fieldName = (char *)malloc(strlen(name) + 16);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
    99
        strcpy(fieldName, name);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   100
        strcat(fieldName, modified ? "_modify" : "_access");
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   101
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   102
        fieldID = (*javaEnv)->GetFieldID(javaEnv, testResultClass, fieldName, "Z");
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   103
        if (fieldID != NULL) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   104
            (*javaEnv)->SetBooleanField(javaEnv, testResultObject, fieldID, JNI_TRUE);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   105
        } else {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   106
            // the field is not interesting for the test
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   107
        }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   108
        // clear any possible exception
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   109
        (*javaEnv)->ExceptionClear(javaEnv);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   110
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   111
        free(fieldName);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   112
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   113
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   114
    (*jvmti)->Deallocate(jvmti, (unsigned char*)csig);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   115
    (*jvmti)->Deallocate(jvmti, (unsigned char*)mname);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   116
    (*jvmti)->Deallocate(jvmti, (unsigned char*)mgensig);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   117
    (*jvmti)->Deallocate(jvmti, (unsigned char*)name);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   118
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   119
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   120
// recursively sets access and modification watchers for all
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   121
// fields of the object specified.
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   122
void setWatchers(JNIEnv *jni_env, const jobject obj)
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   123
{
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   124
    jclass klass;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   125
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   126
    if (obj == NULL) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   127
        return;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   128
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   129
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   130
    klass = (*jni_env)->GetObjectClass(jni_env, obj);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   131
    do {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   132
        jfieldID* klassFields = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   133
        jint fieldCount = 0;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   134
        int i;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   135
        jvmtiError err = (*jvmti)->GetClassFields(jvmti, klass, &fieldCount, &klassFields);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   136
        if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   137
            reportError("Failed to get class fields", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   138
            return;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   139
        }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   140
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   141
        for (i = 0; i < fieldCount; ++i) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   142
            char *sig = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   143
            err = (*jvmti)->SetFieldModificationWatch(jvmti, klass, klassFields[i]);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   144
            if (err != JVMTI_ERROR_NONE && err != JVMTI_ERROR_DUPLICATE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   145
                reportError("Failed to set field modification", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   146
                return;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   147
            }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   148
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   149
            err = (*jvmti)->SetFieldAccessWatch(jvmti, klass, klassFields[i]);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   150
            if (err != JVMTI_ERROR_NONE && err != JVMTI_ERROR_DUPLICATE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   151
                reportError("Failed to set field access", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   152
                return;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   153
            }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   154
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   155
            err = (*jvmti)->GetFieldName(jvmti, klass, klassFields[i], NULL, &sig, NULL);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   156
            if (sig) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   157
                if (sig[0] == 'L') {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   158
                    jobject fieldVal = (*jni_env)->GetObjectField(jni_env, obj, klassFields[i]);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   159
                    setWatchers(jni_env, fieldVal);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   160
                }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   161
                (*jvmti)->Deallocate(jvmti, (unsigned char*)sig);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   162
            }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   163
        }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   164
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   165
        (*jvmti)->Deallocate(jvmti, (unsigned char*)klassFields);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   166
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   167
        klass = (*jni_env)->GetSuperclass(jni_env, klass);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   168
    } while (klass != NULL);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   169
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   170
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   171
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   172
static void JNICALL
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   173
onFieldAccess(jvmtiEnv *jvmti_env,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   174
            JNIEnv* jni_env,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   175
            jthread thread,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   176
            jmethodID method,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   177
            jlocation location,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   178
            jclass field_klass,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   179
            jobject object,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   180
            jfieldID field)
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   181
{
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   182
    handleNotification(method, field, field_klass, 0, location);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   183
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   184
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   185
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   186
static void JNICALL
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   187
onFieldModification(jvmtiEnv *jvmti_env,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   188
            JNIEnv* jni_env,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   189
            jthread thread,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   190
            jmethodID method,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   191
            jlocation location,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   192
            jclass field_klass,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   193
            jobject object,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   194
            jfieldID field,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   195
            char signature_type,
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   196
            jvalue new_value)
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   197
{
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   198
    handleNotification(method, field, field_klass, 1, location);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   199
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   200
    if (signature_type == 'L') {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   201
        jobject newObject = new_value.l;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   202
        setWatchers(jni_env, newObject);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   203
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   204
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   205
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   206
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   207
JNIEXPORT jint JNICALL
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   208
Agent_OnLoad(JavaVM *jvm, char *options, void *reserved)
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   209
{
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   210
    jvmtiError err;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   211
    jvmtiCapabilities caps = {0};
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   212
    jvmtiEventCallbacks callbacks = {0};
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   213
    jint res = (*jvm)->GetEnv(jvm, (void **) &jvmti, JVMTI_VERSION_1_1);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   214
    if (res != JNI_OK || jvmti == NULL) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   215
        reportError("GetEnv failed", res);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   216
        return JNI_ERR;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   217
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   218
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   219
    caps.can_generate_field_modification_events = 1;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   220
    caps.can_generate_field_access_events = 1;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   221
    caps.can_tag_objects = 1;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   222
    err = (*jvmti)->AddCapabilities(jvmti, &caps);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   223
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   224
        reportError("Failed to set capabilities", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   225
        return JNI_ERR;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   226
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   227
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   228
    callbacks.FieldModification = &onFieldModification;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   229
    callbacks.FieldAccess = &onFieldAccess;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   230
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   231
    err = (*jvmti)->SetEventCallbacks(jvmti, &callbacks, sizeof(callbacks));
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   232
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   233
        reportError("Failed to set event callbacks", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   234
        return JNI_ERR;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   235
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   236
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   237
    err = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE, JVMTI_EVENT_FIELD_ACCESS, NULL);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   238
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   239
        reportError("Failed to set access notifications", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   240
        return JNI_ERR;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   241
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   242
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   243
    err = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE, JVMTI_EVENT_FIELD_MODIFICATION, NULL);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   244
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   245
        reportError("Failed to set modification notifications", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   246
        return JNI_ERR;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   247
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   248
    setbuf(stdout, NULL);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   249
    return JNI_OK;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   250
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   251
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   252
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   253
JNIEXPORT jboolean JNICALL
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   254
Java_FieldAccessWatch_initWatchers(JNIEnv *env, jclass thisClass, jclass cls, jobject field)
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   255
{
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   256
    jfieldID fieldId;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   257
    jvmtiError err;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   258
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   259
    if (jvmti == NULL) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   260
        reportError("jvmti is NULL", 0);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   261
        return JNI_FALSE;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   262
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   263
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   264
    fieldId = (*env)->FromReflectedField(env, field);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   265
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   266
    err = (*jvmti)->SetFieldModificationWatch(jvmti, cls, fieldId);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   267
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   268
        reportError("SetFieldModificationWatch failed", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   269
        return JNI_FALSE;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   270
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   271
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   272
    err = (*jvmti)->SetFieldAccessWatch(jvmti, cls, fieldId);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   273
    if (err != JVMTI_ERROR_NONE) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   274
        reportError("SetFieldAccessWatch failed", err);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   275
        return JNI_FALSE;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   276
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   277
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   278
    return JNI_TRUE;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   279
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   280
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   281
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   282
JNIEXPORT jboolean JNICALL
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   283
Java_FieldAccessWatch_startTest(JNIEnv *env, jclass thisClass, jobject testResults)
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   284
{
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   285
    javaEnv = env;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   286
    testResultObject = (*javaEnv)->NewGlobalRef(javaEnv, testResults);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   287
    testResultClass = (jclass)(*javaEnv)->NewGlobalRef(javaEnv, (*javaEnv)->GetObjectClass(javaEnv, testResultObject));
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   288
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   289
    return JNI_TRUE;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   290
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   291
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   292
JNIEXPORT void JNICALL
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   293
Java_FieldAccessWatch_stopTest(JNIEnv *env, jclass thisClass)
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   294
{
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   295
    if (testResultObject != NULL) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   296
        (*env)->DeleteGlobalRef(env, testResultObject);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   297
        testResultObject = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   298
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   299
    if (testResultClass != NULL) {
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   300
        (*env)->DeleteGlobalRef(env, testResultClass);
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   301
        testResultClass = NULL;
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   302
    }
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   303
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   304
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   305
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   306
#ifdef __cplusplus
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   307
}
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   308
#endif
2d1d0c66966b 8193369: post_field_access does not work for some functions, possibly related to fast_getfield
amenkov
parents:
diff changeset
   309