author | ctornqvi |
Fri, 19 Aug 2016 10:06:30 -0400 | |
changeset 40631 | ed82623d7831 |
parent 38152 | 80e5da81fb2c |
child 44633 | d2f5e8921045 |
permissions | -rw-r--r-- |
35493
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
1 |
/* |
40631
ed82623d7831
8157957: ClassNotFoundException: jdk.test.lib.JDKToolFinder
ctornqvi
parents:
38152
diff
changeset
|
2 |
* Copyright (c) 2015, 2016, Oracle and/or its affiliates. All rights reserved. |
35493
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
3 |
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
4 |
* |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
5 |
* This code is free software; you can redistribute it and/or modify it |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
6 |
* under the terms of the GNU General Public License version 2 only, as |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
7 |
* published by the Free Software Foundation. |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
8 |
* |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
9 |
* This code is distributed in the hope that it will be useful, but WITHOUT |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
10 |
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
11 |
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
12 |
* version 2 for more details (a copy is included in the LICENSE file that |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
13 |
* accompanied this code). |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
14 |
* |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
15 |
* You should have received a copy of the GNU General Public License version |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
16 |
* 2 along with this work; if not, write to the Free Software Foundation, |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
17 |
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
18 |
* |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
19 |
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
20 |
* or visit www.oracle.com if you need additional information or have any |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
21 |
* questions. |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
22 |
*/ |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
23 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
24 |
/* |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
25 |
* @test |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
26 |
* @summary Create a thread which stops in methods a(), a()->b(), a()->b()->c(), |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
27 |
* synchronizing on one monitor inside of each method. |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
28 |
* After checking that lock info is correct invoke another method |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
29 |
* and get the lock again. Repeat this action. |
38152
80e5da81fb2c
8154258: [TESTBUG] Various serviceability tests fail compilation
dsamersoff
parents:
35493
diff
changeset
|
30 |
* @modules java.base/jdk.internal.misc |
40631
ed82623d7831
8157957: ClassNotFoundException: jdk.test.lib.JDKToolFinder
ctornqvi
parents:
38152
diff
changeset
|
31 |
* @library /test/lib |
35493
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
32 |
* @library ../share |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
33 |
* @run main/othervm -XX:+UsePerfData SpreadLockTest |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
34 |
*/ |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
35 |
import common.ToolResults; |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
36 |
import java.util.Iterator; |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
37 |
import utils.*; |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
38 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
39 |
class SpreadLockDebuggee extends Thread { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
40 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
41 |
static final String THREAD_NAME = "MyThread"; |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
42 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
43 |
SpreadLockDebuggee() { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
44 |
setName(THREAD_NAME); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
45 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
46 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
47 |
Object monitor = new Object(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
48 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
49 |
public void c() { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
50 |
synchronized (monitor) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
51 |
Utils.sleep(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
52 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
53 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
54 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
55 |
public void b() { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
56 |
synchronized (monitor) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
57 |
try { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
58 |
while (true) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
59 |
Thread.sleep(Long.MAX_VALUE); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
60 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
61 |
} catch (InterruptedException e) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
62 |
c(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
63 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
64 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
65 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
66 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
67 |
public void a() { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
68 |
synchronized (monitor) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
69 |
try { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
70 |
while (true) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
71 |
Thread.sleep(Long.MAX_VALUE); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
72 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
73 |
} catch (InterruptedException e) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
74 |
b(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
75 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
76 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
77 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
78 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
79 |
@Override |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
80 |
public void run() { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
81 |
a(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
82 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
83 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
84 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
85 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
86 |
public class SpreadLockTest { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
87 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
88 |
public static void main(String[] args) throws Exception { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
89 |
new SpreadLockTest().doTest(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
90 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
91 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
92 |
private void doTest() throws Exception { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
93 |
SpreadLockDebuggee debuggee = new SpreadLockDebuggee(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
94 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
95 |
// Start in method a() |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
96 |
debuggee.start(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
97 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
98 |
// Collect output from the jstack tool |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
99 |
JstackTool jstackTool = new JstackTool(ProcessHandle.current().getPid()); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
100 |
ToolResults results1 = jstackTool.measure(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
101 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
102 |
// Go to method b() |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
103 |
debuggee.interrupt(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
104 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
105 |
// Collect output from the jstack tool |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
106 |
ToolResults results2 = jstackTool.measure(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
107 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
108 |
// Go to method c() |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
109 |
debuggee.interrupt(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
110 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
111 |
// Collect output from the jstack tool |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
112 |
ToolResults results3 = jstackTool.measure(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
113 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
114 |
analyse(results1.getStdoutString(), results2.getStdoutString(), results3.getStdoutString()); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
115 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
116 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
117 |
// Analyzing the outputs from the 3 jstack runs |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
118 |
public void analyse(String result1, String result2, String result3) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
119 |
String jstackStr1 = result1; |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
120 |
String jstackStr2 = result2; |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
121 |
String jstackStr3 = result3; |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
122 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
123 |
if (jstackStr1 == null) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
124 |
throw new RuntimeException("First jstack output is empty"); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
125 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
126 |
if (jstackStr2 == null) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
127 |
throw new RuntimeException("Second jstack output is empty"); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
128 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
129 |
if (jstackStr3 == null) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
130 |
throw new RuntimeException("Third jstack output is empty"); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
131 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
132 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
133 |
Format format = new DefaultFormat(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
134 |
JStack jstack1 = format.parse(jstackStr1); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
135 |
JStack jstack2 = format.parse(jstackStr2); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
136 |
JStack jstack3 = format.parse(jstackStr3); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
137 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
138 |
ThreadStack ts1 = jstack1.getThreadStack(SpreadLockDebuggee.THREAD_NAME); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
139 |
ThreadStack ts2 = jstack2.getThreadStack(SpreadLockDebuggee.THREAD_NAME); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
140 |
ThreadStack ts3 = jstack3.getThreadStack(SpreadLockDebuggee.THREAD_NAME); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
141 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
142 |
if (ts1 == null || ts2 == null || ts3 == null) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
143 |
throw new RuntimeException( |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
144 |
"One of thread stack trace is null in the first jstack output : " |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
145 |
+ ts1 + ", " + ts2 + ", " + ts3); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
146 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
147 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
148 |
MonitorInfo[] monitorInfo = new MonitorInfo[6]; |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
149 |
int counter = 0; |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
150 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
151 |
Iterator<MethodInfo> it = ts1.getStack().iterator(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
152 |
while (it.hasNext()) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
153 |
MethodInfo mi = it.next(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
154 |
if (mi.getName().startsWith(SpreadLockDebuggee.class.getName() + ".a")) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
155 |
monitorInfo[counter++] = haveToHaveOneLock(mi); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
156 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
157 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
158 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
159 |
it = ts2.getStack().iterator(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
160 |
while (it.hasNext()) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
161 |
MethodInfo mi = it.next(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
162 |
if (mi.getName().startsWith(SpreadLockDebuggee.class.getName() + ".a") |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
163 |
|| mi.getName().startsWith(SpreadLockDebuggee.class.getName() + ".b")) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
164 |
monitorInfo[counter++] = haveToHaveOneLock(mi); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
165 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
166 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
167 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
168 |
it = ts3.getStack().iterator(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
169 |
while (it.hasNext()) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
170 |
MethodInfo mi = it.next(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
171 |
if (mi.getName().startsWith(SpreadLockDebuggee.class.getName() + ".a") |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
172 |
|| mi.getName().startsWith(SpreadLockDebuggee.class.getName() + ".b") |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
173 |
|| mi.getName().startsWith(SpreadLockDebuggee.class.getName() + ".c")) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
174 |
monitorInfo[counter++] = haveToHaveOneLock(mi); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
175 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
176 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
177 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
178 |
System.out.println("All monitors found - passed"); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
179 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
180 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
181 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
182 |
private MonitorInfo haveToHaveOneLock(MethodInfo mi) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
183 |
if (mi.getLocks().size() == 1) { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
184 |
System.out.println("Method \"" + mi.getName() |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
185 |
+ "\" contain 1 lock - correct"); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
186 |
return mi.getLocks().getFirst(); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
187 |
} else { |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
188 |
throw new RuntimeException("Lock count (" |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
189 |
+ mi.getLocks().size() + ") is incorrect in method \"" |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
190 |
+ mi.getName() + "\""); |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
191 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
192 |
} |
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
193 |
|
863fb33f9940
8130063: Refactoring tmtools jstat and jstack tests to jtreg
akulyakh
parents:
diff
changeset
|
194 |
} |