TestStackBangMonitorOwned.java revision 11707:ad7af1afda7a
1/*
2 * Copyright (c) 2013, 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/*
25 * @test
26 * @bug 8032410
27 * @summary Stack overflow at deoptimization doesn't release owned monitors
28 *
29 * @run main/othervm -XX:-BackgroundCompilation -Xss512K -XX:-UseOnStackReplacement
30 *      -XX:CompileCommand=dontinline,compiler.uncommontrap.TestStackBangMonitorOwned::m1
31 *      -XX:CompileCommand=exclude,compiler.uncommontrap.TestStackBangMonitorOwned::m2
32 *      compiler.uncommontrap.TestStackBangMonitorOwned
33 */
34
35package compiler.uncommontrap;
36
37public class TestStackBangMonitorOwned {
38
39    static class UnloadedClass1 {
40        volatile int field;
41    }
42
43    static Object m1(boolean deopt) {
44        long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
45        l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
46        l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
47        l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
48        l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
49        l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
50        l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
51        l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
52        l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
53        l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
54        l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
55        l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
56        l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
57        l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
58        l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
59        l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
60        l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
61        l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
62        l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
63        l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
64        l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
65        l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
66        l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
67        l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
68        l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
69        l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
70        l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
71        l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
72        l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
73        l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
74        l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
75        l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
76        l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
77        l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
78        l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
79        l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
80        l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
81        l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
82        l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
83        l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
84        l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
85        l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
86        l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
87        l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
88        l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
89        l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
90        l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
91        l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
92        l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
93        l508, l509, l510, l511;
94
95        long ll0, ll1, ll2, ll3, ll4, ll5, ll6, ll7, ll8, ll9, ll10, ll11, ll12,
96        ll13, ll14, ll15, ll16, ll17, ll18, ll19, ll20, ll21, ll22, ll23, ll24,
97        ll25, ll26, ll27, ll28, ll29, ll30, ll31, ll32, ll33, ll34, ll35, ll36,
98        ll37, ll38, ll39, ll40, ll41, ll42, ll43, ll44, ll45, ll46, ll47, ll48,
99        ll49, ll50, ll51, ll52, ll53, ll54, ll55, ll56, ll57, ll58, ll59, ll60,
100        ll61, ll62, ll63, ll64, ll65, ll66, ll67, ll68, ll69, ll70, ll71, ll72,
101        ll73, ll74, ll75, ll76, ll77, ll78, ll79, ll80, ll81, ll82, ll83, ll84,
102        ll85, ll86, ll87, ll88, ll89, ll90, ll91, ll92, ll93, ll94, ll95, ll96,
103        ll97, ll98, ll99, ll100, ll101, ll102, ll103, ll104, ll105, ll106, ll107,
104        ll108, ll109, ll110, ll111, ll112, ll113, ll114, ll115, ll116, ll117,
105        ll118, ll119, ll120, ll121, ll122, ll123, ll124, ll125, ll126, ll127,
106        ll128, ll129, ll130, ll131, ll132, ll133, ll134, ll135, ll136, ll137,
107        ll138, ll139, ll140, ll141, ll142, ll143, ll144, ll145, ll146, ll147,
108        ll148, ll149, ll150, ll151, ll152, ll153, ll154, ll155, ll156, ll157,
109        ll158, ll159, ll160, ll161, ll162, ll163, ll164, ll165, ll166, ll167,
110        ll168, ll169, ll170, ll171, ll172, ll173, ll174, ll175, ll176, ll177,
111        ll178, ll179, ll180, ll181, ll182, ll183, ll184, ll185, ll186, ll187,
112        ll188, ll189, ll190, ll191, ll192, ll193, ll194, ll195, ll196, ll197,
113        ll198, ll199, ll200, ll201, ll202, ll203, ll204, ll205, ll206, ll207,
114        ll208, ll209, ll210, ll211, ll212, ll213, ll214, ll215, ll216, ll217,
115        ll218, ll219, ll220, ll221, ll222, ll223, ll224, ll225, ll226, ll227,
116        ll228, ll229, ll230, ll231, ll232, ll233, ll234, ll235, ll236, ll237,
117        ll238, ll239, ll240, ll241, ll242, ll243, ll244, ll245, ll246, ll247,
118        ll248, ll249, ll250, ll251, ll252, ll253, ll254, ll255, ll256, ll257,
119        ll258, ll259, ll260, ll261, ll262, ll263, ll264, ll265, ll266, ll267,
120        ll268, ll269, ll270, ll271, ll272, ll273, ll274, ll275, ll276, ll277,
121        ll278, ll279, ll280, ll281, ll282, ll283, ll284, ll285, ll286, ll287,
122        ll288, ll289, ll290, ll291, ll292, ll293, ll294, ll295, ll296, ll297,
123        ll298, ll299, ll300, ll301, ll302, ll303, ll304, ll305, ll306, ll307,
124        ll308, ll309, ll310, ll311, ll312, ll313, ll314, ll315, ll316, ll317,
125        ll318, ll319, ll320, ll321, ll322, ll323, ll324, ll325, ll326, ll327,
126        ll328, ll329, ll330, ll331, ll332, ll333, ll334, ll335, ll336, ll337,
127        ll338, ll339, ll340, ll341, ll342, ll343, ll344, ll345, ll346, ll347,
128        ll348, ll349, ll350, ll351, ll352, ll353, ll354, ll355, ll356, ll357,
129        ll358, ll359, ll360, ll361, ll362, ll363, ll364, ll365, ll366, ll367,
130        ll368, ll369, ll370, ll371, ll372, ll373, ll374, ll375, ll376, ll377,
131        ll378, ll379, ll380, ll381, ll382, ll383, ll384, ll385, ll386, ll387,
132        ll388, ll389, ll390, ll391, ll392, ll393, ll394, ll395, ll396, ll397,
133        ll398, ll399, ll400, ll401, ll402, ll403, ll404, ll405, ll406, ll407,
134        ll408, ll409, ll410, ll411, ll412, ll413, ll414, ll415, ll416, ll417,
135        ll418, ll419, ll420, ll421, ll422, ll423, ll424, ll425, ll426, ll427,
136        ll428, ll429, ll430, ll431, ll432, ll433, ll434, ll435, ll436, ll437,
137        ll438, ll439, ll440, ll441, ll442, ll443, ll444, ll445, ll446, ll447,
138        ll448, ll449, ll450, ll451, ll452, ll453, ll454, ll455, ll456, ll457,
139        ll458, ll459, ll460, ll461, ll462, ll463, ll464, ll465, ll466, ll467,
140        ll468, ll469, ll470, ll471, ll472, ll473, ll474, ll475, ll476, ll477,
141        ll478, ll479, ll480, ll481, ll482, ll483, ll484, ll485, ll486, ll487,
142        ll488, ll489, ll490, ll491, ll492, ll493, ll494, ll495, ll496, ll497,
143        ll498, ll499, ll500, ll501, ll502, ll503, ll504, ll505, ll506, ll507,
144        ll508, ll509, ll510, ll511;
145
146        if (deopt) {
147            method_entered = true;
148            synchronized(monitor) {
149                do_monitor_acquire = true;
150                UnloadedClass1 res = new UnloadedClass1(); // forces deopt with c2
151                res.field = 0; //forced deopt with c1
152                return res;
153            }
154        }
155        return null;
156    }
157
158    static boolean m2(boolean deopt) {
159        long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
160        l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
161        l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
162        l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
163        l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
164        l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
165        l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
166        l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
167        l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
168        l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
169        l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
170        l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
171        l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
172        l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
173        l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
174        l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
175        l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
176        l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
177        l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
178        l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
179        l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
180        l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
181        l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
182        l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
183        l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
184        l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
185        l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
186        l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
187        l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
188        l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
189        l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
190        l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
191        l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
192        l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
193        l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
194        l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
195        l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
196        l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
197        l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
198        l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
199        l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
200        l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
201        l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
202        l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
203        l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
204        l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
205        l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
206        l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
207        l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
208        l508, l509, l510, l511;
209
210        boolean do_m3 = false;
211        try {
212            do_m3 = m2(deopt);
213        } catch (StackOverflowError e) {
214            return true;
215        }
216        if (do_m3) {
217            try {
218                m1(deopt);
219            } catch (StackOverflowError e) {}
220        }
221        return false;
222    }
223
224    // Used for synchronization betwen threads
225    static volatile boolean thread_started = false;
226    static volatile boolean do_monitor_acquire = false;
227    static volatile boolean monitor_acquired = false;
228    static volatile boolean method_entered = false;
229
230    static Object monitor = new Object();
231
232    static public void main(String[] args) {
233        // get m1 compiled
234        for (int i = 0; i < 20000; i++) {
235            m1(false);
236        }
237
238        Thread thread = new Thread() {
239            public void run() {
240                thread_started = true;
241                while(!do_monitor_acquire);
242                System.out.println("Ok to try to acquire the lock");
243                synchronized(monitor) {
244                    monitor_acquired = true;
245                }
246            }
247        };
248
249        thread.setDaemon(true);
250        thread.start();
251
252        while(!thread_started);
253
254        m2(true);
255
256        if (!method_entered) {
257            System.out.println("TEST PASSED");
258            return;
259        }
260
261        for (int i = 0; i < 10; i++) {
262            System.out.println("Is lock acquired?");
263            if (monitor_acquired) {
264                System.out.println("TEST PASSED");
265                return;
266            }
267            try {
268                Thread.sleep(10000);
269            } catch(InterruptedException ie) {
270            }
271        }
272        System.out.println("TEST FAILED");
273    }
274}
275