Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/vmTestbase/nsk/stress/strace/strace004.cpp
41155 views
1
/*
2
* Copyright (c) 2003, 2018, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
#include <stdio.h>
25
#include "nsk_strace.h"
26
27
extern "C" {
28
29
static const char *Stest_cn="nsk/stress/strace/strace004";
30
static const char *Slongparam="(J)V";
31
32
JNIEXPORT void JNICALL
33
Java_nsk_stress_strace_strace004Thread_recursiveMethod(JNIEnv *env, jobject obj)
34
{
35
jfieldID field;
36
jmethodID method;
37
jint currDepth;
38
jclass testClass, threadClass, objClass;
39
jint maxDepth;
40
jboolean isLocked;
41
jint achivedCount;
42
jobject testField, waitStart;
43
44
FIND_CLASS(testClass, Stest_cn);
45
FIND_CLASS(objClass, "java/lang/Object");
46
GET_OBJECT_CLASS(threadClass, obj);
47
48
/* currDepth++ */
49
GET_INT_FIELD(currDepth, obj, threadClass, "currentDepth");
50
currDepth++;
51
SET_INT_FIELD(obj, threadClass, "currentDepth", currDepth);
52
53
if (currDepth == 1)
54
{
55
GET_OBJ_FIELD(testField, obj, threadClass, "test",
56
"Lnsk/stress/strace/strace004;");
57
58
GET_STATIC_OBJ_FIELD(waitStart, testClass, "waitStart",
59
"Ljava/lang/Object;");
60
61
MONITOR_ENTER(testField);
62
GET_INT_FIELD(achivedCount, testField, testClass, "achivedCount");
63
achivedCount++;
64
SET_INT_FIELD(testField, testClass, "achivedCount", achivedCount);
65
MONITOR_EXIT(testField);
66
67
GET_STATIC_BOOL_FIELD(isLocked, testClass, "isLocked");
68
while (isLocked != JNI_TRUE)
69
{
70
MONITOR_ENTER(waitStart);
71
CALL_VOID(waitStart, objClass, "wait", Slongparam, 1LL);
72
MONITOR_EXIT(waitStart);
73
GET_STATIC_BOOL_FIELD(isLocked, testClass, "isLocked");
74
}
75
}
76
77
GET_STATIC_INT_FIELD(maxDepth, testClass, "DEPTH");
78
79
if (maxDepth - currDepth > 0)
80
{
81
CALL_STATIC_VOID_NOPARAM(threadClass, "yield");
82
CALL_VOID_NOPARAM(obj, threadClass, "recursiveMethod");
83
}
84
85
currDepth--;
86
GET_OBJECT_CLASS(threadClass, obj);
87
SET_INT_FIELD(obj, threadClass, "currentDepth", currDepth);
88
}
89
90
}
91
92