hotspot/test/serviceability/jvmti/GetOwnedMonitorInfo/libGetOwnedMonitorInfoTest.c
author ysuenaga
Mon, 07 Aug 2017 12:34:21 -0700
changeset 46765 07298ebd9367
permissions -rw-r--r--
8185164: GetOwnedMonitorInfo() returns incorrect owned monitor Summary: The GetOwnedMonitorInfo() should not return a pending monitor Reviewed-by: dholmes, dcubed, sspitsyn
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
46765
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
     1
/*
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
     2
 * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved.
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
     3
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
     4
 *
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
     5
 * This code is free software; you can redistribute it and/or modify it
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
     6
 * under the terms of the GNU General Public License version 2 only, as
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
     7
 * published by the Free Software Foundation.
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
     8
 *
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
     9
 * This code is distributed in the hope that it will be useful, but WITHOUT
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    10
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    11
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    12
 * version 2 for more details (a copy is included in the LICENSE file that
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    13
 * accompanied this code).
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    14
 *
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    15
 * You should have received a copy of the GNU General Public License version
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    16
 * 2 along with this work; if not, write to the Free Software Foundation,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    17
 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    18
 *
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    19
 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    20
 * or visit www.oracle.com if you need additional information or have any
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    21
 * questions.
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    22
 */
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    23
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    24
#include <stdio.h>
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    25
#include <string.h>
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    26
#include "jvmti.h"
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    27
#include "jni.h"
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    28
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    29
#ifdef __cplusplus
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    30
extern "C" {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    31
#endif
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    32
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    33
#ifndef JNI_ENV_ARG
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    34
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    35
#ifdef __cplusplus
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    36
#define JNI_ENV_ARG(x, y) y
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    37
#define JNI_ENV_PTR(x) x
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    38
#else
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    39
#define JNI_ENV_ARG(x,y) x, y
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    40
#define JNI_ENV_PTR(x) (*x)
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    41
#endif
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    42
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    43
#endif
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    44
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    45
#define PASSED 0
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    46
#define FAILED 2
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    47
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    48
#define TEST_CLASS "GetOwnedMonitorInfoTest"
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    49
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    50
static volatile jboolean event_has_posted = JNI_FALSE;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    51
static volatile jint status = PASSED;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    52
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    53
static jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    54
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    55
static void ShowErrorMessage(jvmtiEnv *jvmti, jvmtiError errCode, const char *message) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    56
    char *errMsg;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    57
    jvmtiError result;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    58
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    59
    result = (*jvmti)->GetErrorName(jvmti, errCode, &errMsg);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    60
    if (result == JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    61
        fprintf(stderr, "%s: %s (%d)\n", message, errMsg, errCode);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    62
        (*jvmti)->Deallocate(jvmti, (unsigned char *)errMsg);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    63
    } else {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    64
        fprintf(stderr, "%s (%d)\n", message, errCode);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    65
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    66
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    67
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    68
static jboolean CheckLockObject(JNIEnv *env, jobject monitor) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    69
    jclass testClass;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    70
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    71
    testClass = (*env)->FindClass(env, TEST_CLASS);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    72
    if (testClass == NULL) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    73
        fprintf(stderr, "MonitorContendedEnter: " TEST_CLASS " not found\n");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    74
        status = FAILED;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    75
        event_has_posted = JNI_TRUE;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    76
        return JNI_FALSE;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    77
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    78
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    79
    return (*env)->IsInstanceOf(env, monitor, testClass);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    80
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    81
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    82
JNIEXPORT void JNICALL
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    83
MonitorContendedEnter(jvmtiEnv *jvmti, JNIEnv *env, jthread thread, jobject monitor) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    84
    jvmtiError err;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    85
    jvmtiThreadInfo threadInfo;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    86
    jint monitorCount;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    87
    jobject *ownedMonitors;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    88
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    89
    if (CheckLockObject(env, monitor) == JNI_FALSE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    90
        return;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    91
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    92
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    93
    err = (*jvmti)->GetThreadInfo(jvmti, thread, &threadInfo);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    94
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    95
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    96
                         "MonitorContendedEnter: error in JVMTI GetThreadInfo");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    97
        status = FAILED;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    98
        event_has_posted = JNI_TRUE;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
    99
        return;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   100
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   101
    err = (*jvmti)->GetOwnedMonitorInfo(jvmti, thread, &monitorCount, &ownedMonitors);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   102
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   103
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   104
                         "MonitorContendedEnter: error in JVMTI GetOwnedMonitorInfo");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   105
        status = FAILED;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   106
        event_has_posted = JNI_TRUE;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   107
        return;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   108
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   109
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   110
    printf("MonitorContendedEnter: %s owns %d monitor(s)\n",
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   111
           threadInfo.name, monitorCount);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   112
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   113
    (*jvmti)->Deallocate(jvmti, (unsigned char *)ownedMonitors);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   114
    (*jvmti)->Deallocate(jvmti, (unsigned char *)threadInfo.name);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   115
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   116
    if (monitorCount != 0) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   117
        fprintf(stderr, "MonitorContendedEnter: FAIL: monitorCount should be zero.\n");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   118
        status = FAILED;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   119
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   120
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   121
    event_has_posted = JNI_TRUE;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   122
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   123
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   124
JNIEXPORT void JNICALL
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   125
MonitorContendedEntered(jvmtiEnv *jvmti, JNIEnv *env, jthread thread, jobject monitor) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   126
    jvmtiError err;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   127
    jvmtiThreadInfo threadInfo;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   128
    jint monitorCount;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   129
    jobject *ownedMonitors;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   130
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   131
    if (CheckLockObject(env, monitor) == JNI_FALSE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   132
        return;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   133
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   134
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   135
    err = (*jvmti)->GetThreadInfo(jvmti, thread, &threadInfo);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   136
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   137
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   138
                         "MonitorContendedEntered: error in JVMTI GetThreadInfo");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   139
        status = FAILED;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   140
        return;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   141
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   142
    err = (*jvmti)->GetOwnedMonitorInfo(jvmti, thread, &monitorCount, &ownedMonitors);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   143
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   144
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   145
                         "MonitorContendedEntered: error in JVMTI GetOwnedMonitorInfo");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   146
        status = FAILED;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   147
        return;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   148
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   149
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   150
    printf("MonitorContendedEntered: %s owns %d monitor(s)\n",
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   151
           threadInfo.name, monitorCount);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   152
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   153
    (*jvmti)->Deallocate(jvmti, (unsigned char *)ownedMonitors);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   154
    (*jvmti)->Deallocate(jvmti, (unsigned char *)threadInfo.name);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   155
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   156
    if (monitorCount != 1) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   157
        fprintf(stderr, "MonitorContendedEnter: FAIL: monitorCount should be one.\n");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   158
        status = FAILED;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   159
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   160
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   161
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   162
JNIEXPORT jint JNICALL
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   163
Agent_OnLoad(JavaVM *jvm, char *options, void *reserved) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   164
    return Agent_Initialize(jvm, options, reserved);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   165
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   166
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   167
JNIEXPORT jint JNICALL
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   168
Agent_OnAttach(JavaVM *jvm, char *options, void *reserved) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   169
    return Agent_Initialize(jvm, options, reserved);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   170
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   171
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   172
JNIEXPORT jint JNICALL
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   173
JNI_OnLoad(JavaVM *jvm, void *reserved) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   174
    return JNI_VERSION_1_8;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   175
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   176
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   177
static
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   178
jint Agent_Initialize(JavaVM *jvm, char *options, void *reserved) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   179
    jint res;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   180
    jvmtiError err;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   181
    jvmtiEnv *jvmti;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   182
    jvmtiCapabilities caps;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   183
    jvmtiEventCallbacks callbacks;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   184
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   185
    printf("Agent_OnLoad started\n");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   186
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   187
    res = JNI_ENV_PTR(jvm)->GetEnv(JNI_ENV_ARG(jvm, (void **) &jvmti),
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   188
                                   JVMTI_VERSION_1);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   189
    if (res != JNI_OK || jvmti == NULL) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   190
        fprintf(stderr, "Error: wrong result of a valid call to GetEnv!\n");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   191
        return JNI_ERR;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   192
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   193
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   194
    err = (*jvmti)->GetPotentialCapabilities(jvmti, &caps);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   195
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   196
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   197
                         "Agent_OnLoad: error in JVMTI GetPotentialCapabilities");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   198
        return JNI_ERR;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   199
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   200
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   201
    err = (*jvmti)->AddCapabilities(jvmti, &caps);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   202
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   203
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   204
                         "Agent_OnLoad: error in JVMTI AddCapabilities");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   205
        return JNI_ERR;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   206
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   207
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   208
    err = (*jvmti)->GetCapabilities(jvmti, &caps);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   209
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   210
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   211
                         "Agent_OnLoad: error in JVMTI GetCapabilities");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   212
        return JNI_ERR;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   213
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   214
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   215
    if (!caps.can_generate_monitor_events) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   216
        fprintf(stderr, "Warning: Monitor events are not implemented\n");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   217
        return JNI_ERR;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   218
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   219
    if (!caps.can_get_owned_monitor_info) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   220
        fprintf(stderr, "Warning: GetOwnedMonitorInfo is not implemented\n");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   221
        return JNI_ERR;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   222
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   223
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   224
    callbacks.MonitorContendedEnter   = &MonitorContendedEnter;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   225
    callbacks.MonitorContendedEntered = &MonitorContendedEntered;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   226
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   227
    err = (*jvmti)->SetEventCallbacks(jvmti, &callbacks, sizeof(jvmtiEventCallbacks));
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   228
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   229
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   230
                         "Agent_OnLoad: error in JVMTI SetEventCallbacks");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   231
        return JNI_ERR;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   232
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   233
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   234
    err = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   235
                                             JVMTI_EVENT_MONITOR_CONTENDED_ENTER, NULL);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   236
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   237
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   238
                         "Agent_OnLoad: error in JVMTI SetEventNotificationMode #1");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   239
        return JNI_ERR;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   240
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   241
    err = (*jvmti)->SetEventNotificationMode(jvmti, JVMTI_ENABLE,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   242
                                             JVMTI_EVENT_MONITOR_CONTENDED_ENTERED, NULL);
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   243
    if (err != JVMTI_ERROR_NONE) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   244
        ShowErrorMessage(jvmti, err,
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   245
                         "Agent_OnLoad: error in JVMTI SetEventNotificationMode #2");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   246
        return JNI_ERR;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   247
    }
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   248
    printf("Agent_OnLoad finished\n");
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   249
    return JNI_OK;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   250
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   251
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   252
JNIEXPORT jint JNICALL
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   253
Java_GetOwnedMonitorInfoTest_check(JNIEnv *env, jclass cls) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   254
    return status;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   255
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   256
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   257
JNIEXPORT jboolean JNICALL
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   258
Java_GetOwnedMonitorInfoTest_hasEventPosted(JNIEnv *env, jclass cls) {
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   259
    return event_has_posted;
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   260
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   261
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   262
#ifdef __cplusplus
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   263
}
07298ebd9367 8185164: GetOwnedMonitorInfo() returns incorrect owned monitor
ysuenaga
parents:
diff changeset
   264
#endif