TestStackBangMonitorOwned.java revision 11486:3950d1713ffa
1696Spaul/*
214260Spst * Copyright (c) 2013, Oracle and/or its affiliates. All rights reserved.
3696Spaul * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4696Spaul *
5696Spaul * This code is free software; you can redistribute it and/or modify it
6696Spaul * under the terms of the GNU General Public License version 2 only, as
7696Spaul * published by the Free Software Foundation.
8696Spaul *
9696Spaul * This code is distributed in the hope that it will be useful, but WITHOUT
10696Spaul * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11696Spaul * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
12696Spaul * version 2 for more details (a copy is included in the LICENSE file that
13696Spaul * accompanied this code).
14696Spaul *
15696Spaul * You should have received a copy of the GNU General Public License version
16696Spaul * 2 along with this work; if not, write to the Free Software Foundation,
171153Sjkh * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18696Spaul *
19696Spaul * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20696Spaul * or visit www.oracle.com if you need additional information or have any
21696Spaul * questions.
22696Spaul */
23696Spaul
24696Spaul/*
25696Spaul * @test
26696Spaul * @bug 8032410
27696Spaul * @summary Stack overflow at deoptimization doesn't release owned monitors
28696Spaul * @run main/othervm -XX:-BackgroundCompilation -XX:CompileCommand=dontinline,TestStackBangMonitorOwned::m1 -XX:CompileCommand=exclude,TestStackBangMonitorOwned::m2 -Xss512K -XX:-UseOnStackReplacement TestStackBangMonitorOwned
29696Spaul *
3018597Speter */
31696Spaulpublic class TestStackBangMonitorOwned {
32696Spaul
33696Spaul    static class UnloadedClass1 {
34696Spaul        volatile int field;
35696Spaul    }
36696Spaul
37696Spaul    static Object m1(boolean deopt) {
38696Spaul        long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
39696Spaul        l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
401741Srich        l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
411741Srich        l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
4217142Sjkh        l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
4317142Sjkh        l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
44696Spaul        l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
45696Spaul        l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
46696Spaul        l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
47696Spaul        l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
48696Spaul        l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
491741Srich        l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
501741Srich        l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
51696Spaul        l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
521741Srich        l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
53696Spaul        l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
5418597Speter        l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
55696Spaul        l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
5618597Speter        l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
5718597Speter        l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
5818597Speter        l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
5918597Speter        l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
6018597Speter        l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
61696Spaul        l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
62696Spaul        l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
63696Spaul        l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
645205Snate        l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
655205Snate        l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
66696Spaul        l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
67696Spaul        l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
68696Spaul        l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
699290Sasami        l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
70696Spaul        l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
71696Spaul        l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
72696Spaul        l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
73696Spaul        l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
74696Spaul        l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
75696Spaul        l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
76696Spaul        l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
77696Spaul        l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
78696Spaul        l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
79696Spaul        l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
80696Spaul        l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
81696Spaul        l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
82696Spaul        l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
8318597Speter        l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
84696Spaul        l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
85696Spaul        l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
861153Sjkh        l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
879290Sasami        l508, l509, l510, l511;
889290Sasami
899290Sasami        long ll0, ll1, ll2, ll3, ll4, ll5, ll6, ll7, ll8, ll9, ll10, ll11, ll12,
90696Spaul        ll13, ll14, ll15, ll16, ll17, ll18, ll19, ll20, ll21, ll22, ll23, ll24,
91696Spaul        ll25, ll26, ll27, ll28, ll29, ll30, ll31, ll32, ll33, ll34, ll35, ll36,
92696Spaul        ll37, ll38, ll39, ll40, ll41, ll42, ll43, ll44, ll45, ll46, ll47, ll48,
93696Spaul        ll49, ll50, ll51, ll52, ll53, ll54, ll55, ll56, ll57, ll58, ll59, ll60,
94696Spaul        ll61, ll62, ll63, ll64, ll65, ll66, ll67, ll68, ll69, ll70, ll71, ll72,
95696Spaul        ll73, ll74, ll75, ll76, ll77, ll78, ll79, ll80, ll81, ll82, ll83, ll84,
96696Spaul        ll85, ll86, ll87, ll88, ll89, ll90, ll91, ll92, ll93, ll94, ll95, ll96,
97696Spaul        ll97, ll98, ll99, ll100, ll101, ll102, ll103, ll104, ll105, ll106, ll107,
98696Spaul        ll108, ll109, ll110, ll111, ll112, ll113, ll114, ll115, ll116, ll117,
999290Sasami        ll118, ll119, ll120, ll121, ll122, ll123, ll124, ll125, ll126, ll127,
100696Spaul        ll128, ll129, ll130, ll131, ll132, ll133, ll134, ll135, ll136, ll137,
1019290Sasami        ll138, ll139, ll140, ll141, ll142, ll143, ll144, ll145, ll146, ll147,
1029290Sasami        ll148, ll149, ll150, ll151, ll152, ll153, ll154, ll155, ll156, ll157,
103696Spaul        ll158, ll159, ll160, ll161, ll162, ll163, ll164, ll165, ll166, ll167,
1049290Sasami        ll168, ll169, ll170, ll171, ll172, ll173, ll174, ll175, ll176, ll177,
1059290Sasami        ll178, ll179, ll180, ll181, ll182, ll183, ll184, ll185, ll186, ll187,
1069290Sasami        ll188, ll189, ll190, ll191, ll192, ll193, ll194, ll195, ll196, ll197,
107696Spaul        ll198, ll199, ll200, ll201, ll202, ll203, ll204, ll205, ll206, ll207,
108696Spaul        ll208, ll209, ll210, ll211, ll212, ll213, ll214, ll215, ll216, ll217,
109696Spaul        ll218, ll219, ll220, ll221, ll222, ll223, ll224, ll225, ll226, ll227,
1109290Sasami        ll228, ll229, ll230, ll231, ll232, ll233, ll234, ll235, ll236, ll237,
1119290Sasami        ll238, ll239, ll240, ll241, ll242, ll243, ll244, ll245, ll246, ll247,
112696Spaul        ll248, ll249, ll250, ll251, ll252, ll253, ll254, ll255, ll256, ll257,
113696Spaul        ll258, ll259, ll260, ll261, ll262, ll263, ll264, ll265, ll266, ll267,
11418597Speter        ll268, ll269, ll270, ll271, ll272, ll273, ll274, ll275, ll276, ll277,
1155205Snate        ll278, ll279, ll280, ll281, ll282, ll283, ll284, ll285, ll286, ll287,
116696Spaul        ll288, ll289, ll290, ll291, ll292, ll293, ll294, ll295, ll296, ll297,
117696Spaul        ll298, ll299, ll300, ll301, ll302, ll303, ll304, ll305, ll306, ll307,
118696Spaul        ll308, ll309, ll310, ll311, ll312, ll313, ll314, ll315, ll316, ll317,
119696Spaul        ll318, ll319, ll320, ll321, ll322, ll323, ll324, ll325, ll326, ll327,
12018597Speter        ll328, ll329, ll330, ll331, ll332, ll333, ll334, ll335, ll336, ll337,
12118597Speter        ll338, ll339, ll340, ll341, ll342, ll343, ll344, ll345, ll346, ll347,
1229290Sasami        ll348, ll349, ll350, ll351, ll352, ll353, ll354, ll355, ll356, ll357,
1239290Sasami        ll358, ll359, ll360, ll361, ll362, ll363, ll364, ll365, ll366, ll367,
1249290Sasami        ll368, ll369, ll370, ll371, ll372, ll373, ll374, ll375, ll376, ll377,
1259290Sasami        ll378, ll379, ll380, ll381, ll382, ll383, ll384, ll385, ll386, ll387,
126696Spaul        ll388, ll389, ll390, ll391, ll392, ll393, ll394, ll395, ll396, ll397,
12718597Speter        ll398, ll399, ll400, ll401, ll402, ll403, ll404, ll405, ll406, ll407,
1281741Srich        ll408, ll409, ll410, ll411, ll412, ll413, ll414, ll415, ll416, ll417,
129696Spaul        ll418, ll419, ll420, ll421, ll422, ll423, ll424, ll425, ll426, ll427,
13018597Speter        ll428, ll429, ll430, ll431, ll432, ll433, ll434, ll435, ll436, ll437,
13118597Speter        ll438, ll439, ll440, ll441, ll442, ll443, ll444, ll445, ll446, ll447,
13218597Speter        ll448, ll449, ll450, ll451, ll452, ll453, ll454, ll455, ll456, ll457,
13318597Speter        ll458, ll459, ll460, ll461, ll462, ll463, ll464, ll465, ll466, ll467,
13418597Speter        ll468, ll469, ll470, ll471, ll472, ll473, ll474, ll475, ll476, ll477,
13518597Speter        ll478, ll479, ll480, ll481, ll482, ll483, ll484, ll485, ll486, ll487,
13618597Speter        ll488, ll489, ll490, ll491, ll492, ll493, ll494, ll495, ll496, ll497,
13718597Speter        ll498, ll499, ll500, ll501, ll502, ll503, ll504, ll505, ll506, ll507,
13818597Speter        ll508, ll509, ll510, ll511;
13918597Speter
14018597Speter        if (deopt) {
14118597Speter            method_entered = true;
14218597Speter            synchronized(monitor) {
14318597Speter                do_monitor_acquire = true;
144696Spaul                UnloadedClass1 res = new UnloadedClass1(); // forces deopt with c2
1451153Sjkh                res.field = 0; //forced deopt with c1
146696Spaul                return res;
1479290Sasami            }
148696Spaul        }
149696Spaul        return null;
150696Spaul    }
151696Spaul
152696Spaul    static boolean m2(boolean deopt) {
1531153Sjkh        long l0, l1, l2, l3, l4, l5, l6, l7, l8, l9, l10, l11, l12,
154696Spaul        l13, l14, l15, l16, l17, l18, l19, l20, l21, l22, l23, l24,
1551153Sjkh        l25, l26, l27, l28, l29, l30, l31, l32, l33, l34, l35, l36,
156696Spaul        l37, l38, l39, l40, l41, l42, l43, l44, l45, l46, l47, l48,
157696Spaul        l49, l50, l51, l52, l53, l54, l55, l56, l57, l58, l59, l60,
158696Spaul        l61, l62, l63, l64, l65, l66, l67, l68, l69, l70, l71, l72,
15914260Spst        l73, l74, l75, l76, l77, l78, l79, l80, l81, l82, l83, l84,
160696Spaul        l85, l86, l87, l88, l89, l90, l91, l92, l93, l94, l95, l96,
161696Spaul        l97, l98, l99, l100, l101, l102, l103, l104, l105, l106, l107,
162696Spaul        l108, l109, l110, l111, l112, l113, l114, l115, l116, l117,
1631153Sjkh        l118, l119, l120, l121, l122, l123, l124, l125, l126, l127,
1649290Sasami        l128, l129, l130, l131, l132, l133, l134, l135, l136, l137,
165696Spaul        l138, l139, l140, l141, l142, l143, l144, l145, l146, l147,
166696Spaul        l148, l149, l150, l151, l152, l153, l154, l155, l156, l157,
167696Spaul        l158, l159, l160, l161, l162, l163, l164, l165, l166, l167,
168696Spaul        l168, l169, l170, l171, l172, l173, l174, l175, l176, l177,
16914260Spst        l178, l179, l180, l181, l182, l183, l184, l185, l186, l187,
17014260Spst        l188, l189, l190, l191, l192, l193, l194, l195, l196, l197,
171696Spaul        l198, l199, l200, l201, l202, l203, l204, l205, l206, l207,
17214260Spst        l208, l209, l210, l211, l212, l213, l214, l215, l216, l217,
17314260Spst        l218, l219, l220, l221, l222, l223, l224, l225, l226, l227,
17414260Spst        l228, l229, l230, l231, l232, l233, l234, l235, l236, l237,
17514260Spst        l238, l239, l240, l241, l242, l243, l244, l245, l246, l247,
17614260Spst        l248, l249, l250, l251, l252, l253, l254, l255, l256, l257,
177696Spaul        l258, l259, l260, l261, l262, l263, l264, l265, l266, l267,
17814260Spst        l268, l269, l270, l271, l272, l273, l274, l275, l276, l277,
17914260Spst        l278, l279, l280, l281, l282, l283, l284, l285, l286, l287,
18014260Spst        l288, l289, l290, l291, l292, l293, l294, l295, l296, l297,
18114260Spst        l298, l299, l300, l301, l302, l303, l304, l305, l306, l307,
18214260Spst        l308, l309, l310, l311, l312, l313, l314, l315, l316, l317,
183696Spaul        l318, l319, l320, l321, l322, l323, l324, l325, l326, l327,
18414260Spst        l328, l329, l330, l331, l332, l333, l334, l335, l336, l337,
18514260Spst        l338, l339, l340, l341, l342, l343, l344, l345, l346, l347,
18614260Spst        l348, l349, l350, l351, l352, l353, l354, l355, l356, l357,
18714260Spst        l358, l359, l360, l361, l362, l363, l364, l365, l366, l367,
18814260Spst        l368, l369, l370, l371, l372, l373, l374, l375, l376, l377,
18914260Spst        l378, l379, l380, l381, l382, l383, l384, l385, l386, l387,
19014260Spst        l388, l389, l390, l391, l392, l393, l394, l395, l396, l397,
19114260Spst        l398, l399, l400, l401, l402, l403, l404, l405, l406, l407,
19214260Spst        l408, l409, l410, l411, l412, l413, l414, l415, l416, l417,
193696Spaul        l418, l419, l420, l421, l422, l423, l424, l425, l426, l427,
194696Spaul        l428, l429, l430, l431, l432, l433, l434, l435, l436, l437,
19514260Spst        l438, l439, l440, l441, l442, l443, l444, l445, l446, l447,
19614260Spst        l448, l449, l450, l451, l452, l453, l454, l455, l456, l457,
19714260Spst        l458, l459, l460, l461, l462, l463, l464, l465, l466, l467,
19814260Spst        l468, l469, l470, l471, l472, l473, l474, l475, l476, l477,
19914260Spst        l478, l479, l480, l481, l482, l483, l484, l485, l486, l487,
20014260Spst        l488, l489, l490, l491, l492, l493, l494, l495, l496, l497,
201696Spaul        l498, l499, l500, l501, l502, l503, l504, l505, l506, l507,
202696Spaul        l508, l509, l510, l511;
203696Spaul
204696Spaul        boolean do_m3 = false;
205696Spaul        try {
206696Spaul            do_m3 = m2(deopt);
207696Spaul        } catch (StackOverflowError e) {
208696Spaul            return true;
209696Spaul        }
210696Spaul        if (do_m3) {
211696Spaul            try {
212696Spaul                m1(deopt);
213696Spaul            } catch (StackOverflowError e) {}
214696Spaul        }
215696Spaul        return false;
216696Spaul    }
217696Spaul
218696Spaul    // Used for synchronization betwen threads
219696Spaul    static volatile boolean thread_started = false;
220696Spaul    static volatile boolean do_monitor_acquire = false;
221696Spaul    static volatile boolean monitor_acquired = false;
222696Spaul    static volatile boolean method_entered = false;
223696Spaul
224696Spaul    static Object monitor = new Object();
225696Spaul
226696Spaul    static public void main(String[] args) {
227696Spaul        // get m1 compiled
228696Spaul        for (int i = 0; i < 20000; i++) {
229696Spaul            m1(false);
230696Spaul        }
231696Spaul
232696Spaul        Thread thread = new Thread() {
233696Spaul            public void run() {
234696Spaul                thread_started = true;
235696Spaul                while(!do_monitor_acquire);
236696Spaul                System.out.println("Ok to try to acquire the lock");
237696Spaul                synchronized(monitor) {
238696Spaul                    monitor_acquired = true;
239696Spaul                }
240696Spaul            }
241696Spaul        };
242696Spaul
243696Spaul        thread.setDaemon(true);
244696Spaul        thread.start();
245696Spaul
246696Spaul        while(!thread_started);
247696Spaul
248696Spaul        m2(true);
249696Spaul
250696Spaul        if (!method_entered) {
251696Spaul            System.out.println("TEST PASSED");
252696Spaul            return;
253696Spaul        }
254696Spaul
255696Spaul        for (int i = 0; i < 10; i++) {
256696Spaul            System.out.println("Is lock acquired?");
257696Spaul            if (monitor_acquired) {
258696Spaul                System.out.println("TEST PASSED");
259696Spaul                return;
260696Spaul            }
261696Spaul            try {
262696Spaul                Thread.sleep(10000);
263696Spaul            } catch(InterruptedException ie) {
2645551Sjoerg            }
265696Spaul        }
2665551Sjoerg        System.out.println("TEST FAILED");
267696Spaul    }
268696Spaul}
269696Spaul