1 /* 2 * Copyright (C) 2018 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 class NotLoaded { foo()18 public void foo() {} 19 } 20 21 public class Main { main(String[] args)22 public static void main(String[] args) throws Exception { 23 System.loadLibrary(args[0]); 24 TestSync.run(); 25 } 26 run()27 public static void run() { 28 testVisitLocks(); 29 } 30 31 static Object myStatic; 32 33 // Note: declared in 167-visit-locks. testVisitLocks()34 public static native void testVisitLocks(); 35 } 36 37 // 167-visit-locks/visit-locks.cc looks at the locks held in TestSync.run(). 38 class TestSync { run()39 public static void run() { 40 Object o = Main.myStatic; 41 if (o != null) { 42 if (o instanceof NotLoaded) { 43 ((NotLoaded)o).foo(); 44 } 45 } 46 synchronized ("MyString") { 47 Main.testVisitLocks(); 48 } 49 } 50 } 51