1 /* 2 * Copyright (c) 2020, Oracle and/or its affiliates. All rights reserved. 3 * Copyright (c) 2020, NTT DATA. 4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 5 * 6 * This code is free software; you can redistribute it and/or modify it 7 * under the terms of the GNU General Public License version 2 only, as 8 * published by the Free Software Foundation. 9 * 10 * This code is distributed in the hope that it will be useful, but WITHOUT 11 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 12 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 13 * version 2 for more details (a copy is included in the LICENSE file that 14 * accompanied this code). 15 * 16 * You should have received a copy of the GNU General Public License version 17 * 2 along with this work; if not, write to the Free Software Foundation, 18 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 19 * 20 * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA 21 * or visit www.oracle.com if you need additional information or have any 22 * questions. 23 */ 24 25 /** 26 * @test 27 * @summary Verifies JVMTI GetThreadListStackTraces API with thread_count = 1 28 * @library /test/lib 29 * @run main/othervm/native -agentlib:OneGetThreadListStackTraces OneGetThreadListStackTraces 30 * 31 */ 32 33 public class OneGetThreadListStackTraces implements Runnable { 34 35 private Object lock; 36 37 public OneGetThreadListStackTraces(Object lock) { 38 this.lock = lock; 39 } 40 41 private static native void checkCallStacks(Thread thread); 42 43 @Override 44 public void run() { 45 try { 46 synchronized (lock) { 47 lock.wait(); 48 System.out.println("OK"); 49 } 50 } catch (Exception e) { 51 throw new RuntimeException(e); 52 } 53 } 54 55 public static void main(String[] args) throws Exception { 56 Object lockObj = new Object(); 57 Thread th = new Thread(new OneGetThreadListStackTraces(lockObj), "test thread"); 58 th.start(); 59 60 /* Wait until the thread state transits to "waiting" */ 61 while (th.getState() != Thread.State.WAITING) { 62 Thread.onSpinWait(); 63 } 64 65 checkCallStacks(th); 66 67 synchronized (lockObj) { 68 lockObj.notify(); 69 } 70 } 71 }