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