1572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams/* 2572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Copyright (C) 2008-2012 The Android Open Source Project 3572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 4572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Licensed under the Apache License, Version 2.0 (the "License"); 5572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * you may not use this file except in compliance with the License. 6572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * You may obtain a copy of the License at 7572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 8572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * http://www.apache.org/licenses/LICENSE-2.0 9572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * 10572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * Unless required by applicable law or agreed to in writing, software 11572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * distributed under the License is distributed on an "AS IS" BASIS, 12572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * See the License for the specific language governing permissions and 14572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * limitations under the License. 15572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */ 16572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 17572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspackage com.android.rs.test; 18572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 19572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.Context; 20572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.content.res.Resources; 21572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.renderscript.*; 22572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport android.util.Log; 23572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.util.ArrayList; 24572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.util.ListIterator; 25572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.util.Timer; 26572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samsimport java.util.TimerTask; 2764af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hinesimport android.app.ListActivity; 2864af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hinesimport android.widget.ArrayAdapter; 29572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 30572a5031a5d8602db0bec0b253428a034bd4dd59Jason Samspublic class RSTestCore { 3164af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines ListActivity mCtx; 32572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 3364af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines public RSTestCore(ListActivity ctx) { 34572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mCtx = ctx; 35572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 36572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 37572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Resources mRes; 3864af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines private RenderScript mRS; 39572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 40572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private ArrayList<UnitTest> unitTests; 41572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private ListIterator<UnitTest> test_iter; 42572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private UnitTest activeTest; 43572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private boolean stopTesting; 44572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 4564af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines private ScriptField_ListAllocs_s mListAllocs; 4664af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines 4764af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines private ArrayAdapter<UnitTest> testAdapter; 4864af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines 49572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* Periodic timer for ensuring future tests get scheduled */ 50572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams private Timer mTimer; 51572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public static final int RS_TIMER_PERIOD = 100; 52572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 5364af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines public void init(RenderScript rs, Resources res) { 54572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRS = rs; 55572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mRes = res; 56572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams stopTesting = false; 57572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 58572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests = new ArrayList<UnitTest>(); 59572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 60572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_primitives(this, mRes, mCtx)); 61572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_constant(this, mRes, mCtx)); 62572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_vector(this, mRes, mCtx)); 63572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_unsigned(this, mRes, mCtx)); 64572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_array_init(this, mRes, mCtx)); 65572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_array_alloc(this, mRes, mCtx)); 66572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_kernel(this, mRes, mCtx)); 67572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_kernel_struct(this, mRes, mCtx)); 68dced5c96bc53c45a1aac782ea9bd738b0d50fd09David Gross unitTests.add(new UT_kernel2d(this, mRes, mCtx)); 696cad69d1319000314b23f32f03c38f57b8564906David Gross unitTests.add(new UT_kernel3d(this, mRes, mCtx)); 70dced5c96bc53c45a1aac782ea9bd738b0d50fd09David Gross unitTests.add(new UT_kernel2d_oldstyle(this, mRes, mCtx)); 716a3c8f33e4a334ad6a14e5b0a4d469286a6d3282David Gross unitTests.add(new UT_ctxt_default(this, mRes, mCtx)); 72572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_bug_char(this, mRes, mCtx)); 73572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_clamp(this, mRes, mCtx)); 74572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_clamp_relaxed(this, mRes, mCtx)); 75572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_convert(this, mRes, mCtx)); 76572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_convert_relaxed(this, mRes, mCtx)); 77572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_copy_test(this, mRes, mCtx)); 78572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_rsdebug(this, mRes, mCtx)); 79572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_rstime(this, mRes, mCtx)); 80572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_rstypes(this, mRes, mCtx)); 81572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_alloc(this, mRes, mCtx)); 82da9f173879716082b590606389ae42c7ed15c947Stephen Hines unitTests.add(new UT_check_dims(this, mRes, mCtx)); 83d84ad3f1a23f69c09ca98505522c05880c937bbfStephen Hines unitTests.add(new UT_static_globals(this, mRes, mCtx)); 84572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_refcount(this, mRes, mCtx)); 85572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_foreach(this, mRes, mCtx)); 86572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_foreach_bounds(this, mRes, mCtx)); 87572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_noroot(this, mRes, mCtx)); 88075aa0595525d8e426807686a425c2ec10556fa7Pirama Arumuga Nainar unitTests.add(new UT_single_source_alloc(this, mRes, mCtx)); 8912398d81f32e5e0479d02b8608a83c75cd991bb3Yang Ni unitTests.add(new UT_single_source_script(this, mRes, mCtx)); 90432b47768af4eaa8eca4d94fe7e5a973a1ef1a73Yang Ni unitTests.add(new UT_single_source_ref_count(this, mRes, mCtx)); 917fa7a5b18fe3f693ab1ca43de70937440759bdbdYang Ni unitTests.add(new UT_script_group2_pointwise(this, mRes, mCtx)); 927fa7a5b18fe3f693ab1ca43de70937440759bdbdYang Ni unitTests.add(new UT_script_group2_gatherscatter(this, mRes, mCtx)); 931c20667f7a174a7c0a1599d34a40c524fe24c615Yang Ni unitTests.add(new UT_script_group2_nochain(this, mRes, mCtx)); 94fef0cd45027f235126d4fb62bda5ea9037450d9cYang Ni unitTests.add(new UT_script_group2_float(this, mRes, mCtx)); 95572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_atomic(this, mRes, mCtx)); 96572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_struct(this, mRes, mCtx)); 97572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_math(this, mRes, mCtx)); 98572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_math_conformance(this, mRes, mCtx)); 99572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_math_agree(this, mRes, mCtx)); 100c0c70a7c82c07aeb1cc22ab6f343941d515fa2bbPirama Arumuga Nainar unitTests.add(new UT_fp16(this, mRes, mCtx)); 1016b753367c985ee762ae6563c7948b1ddcf9d06f9Pirama Arumuga Nainar unitTests.add(new UT_math_fp16(this, mRes, mCtx)); 102a73e73342149b45269446c39ced73e44518930d7Pirama Arumuga Nainar unitTests.add(new UT_fp16_globals(this, mRes, mCtx)); 103572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_min(this, mRes, mCtx)); 104572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_int4(this, mRes, mCtx)); 105572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_element(this, mRes, mCtx)); 106572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_sampler(this, mRes, mCtx)); 10764af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines /*unitTests.add(new UT_program_store(this, mRes, mCtx)); 108572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_program_raster(this, mRes, mCtx)); 10964af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines unitTests.add(new UT_mesh(this, mRes, mCtx));*/ 1104b3c34e6833e39bc89c2128002806b654b8e623dChris Wailes unitTests.add(new UT_foreach_multi(this, mRes, mCtx)); 111572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UT_fp_mad(this, mRes, mCtx)); 1126c1876bbef1b2c89975dce91230a168bd2d2ce4cDavid Gross unitTests.add(new UT_reduce(this, mRes, mCtx)); 11373a422b2f32f947ce1b1366a6c78ddec58a4c1eaDavid Gross unitTests.add(new UT_reduce_backward(this, mRes, mCtx)); 1148a526e5d609e34a07aa0bc6312845ebdbd60c43ePirama Arumuga Nainar unitTests.add(new UT_small_struct(this, mRes, mCtx)); 115572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 116572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* 117572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UnitTest(null, "<Pass>", 1)); 118572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UnitTest()); 119572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UnitTest(null, "<Fail>", -1)); 120572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 121572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (int i = 0; i < 20; i++) { 122572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams unitTests.add(new UnitTest(null, "<Pass>", 1)); 123572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 124572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams */ 125572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 126572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams UnitTest [] uta = new UnitTest[unitTests.size()]; 127572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams uta = unitTests.toArray(uta); 128572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 129572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mListAllocs = new ScriptField_ListAllocs_s(mRS, uta.length); 130572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams for (int i = 0; i < uta.length; i++) { 131572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams ScriptField_ListAllocs_s.Item listElem = new ScriptField_ListAllocs_s.Item(); 132572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams listElem.text = Allocation.createFromString(mRS, uta[i].name, Allocation.USAGE_SCRIPT); 133572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams listElem.result = uta[i].getResult(); 134572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mListAllocs.set(listElem, i, false); 135572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams uta[i].setItem(listElem); 136572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 137572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 138572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mListAllocs.copyAll(); 139572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 14064af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines testAdapter = new ArrayAdapter<UnitTest>(mCtx, android.R.layout.simple_list_item_1, unitTests); 14164af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines mCtx.setListAdapter(testAdapter); 142572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 143572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams test_iter = unitTests.listIterator(); 144572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams refreshTestResults(); /* Kick off the first test */ 145572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 146572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams TimerTask pTask = new TimerTask() { 147572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void run() { 148572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams refreshTestResults(); 149572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 150572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams }; 151572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 152572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer = new Timer(); 153572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.schedule(pTask, RS_TIMER_PERIOD, RS_TIMER_PERIOD); 154572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 155572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 156572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void checkAndRunNextTest() { 15764af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines mCtx.runOnUiThread(new Runnable() { 15864af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines public void run() { 15964af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines if (testAdapter != null) 16064af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines testAdapter.notifyDataSetChanged(); 16164af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines } 16264af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines }); 16364af0822b0b7c71cea3a39c9aad10d1cdbf851efStephen Hines 164572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (activeTest != null) { 165572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (!activeTest.isAlive()) { 166572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* Properly clean up on our last test */ 167572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams try { 168572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams activeTest.join(); 169572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 170572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams catch (InterruptedException e) { 171572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 172572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams activeTest = null; 173572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 174572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 175572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 176572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (!stopTesting && activeTest == null) { 177572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (test_iter.hasNext()) { 178572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams activeTest = test_iter.next(); 179572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams activeTest.start(); 180572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* This routine will only get called once when a new test 181572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * should start running. The message handler in UnitTest.java 182572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams * ensures this. */ 183572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 184572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams else { 185572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mTimer != null) { 186572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.cancel(); 187572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.purge(); 188572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer = null; 189572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 190572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 191572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 192572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 193572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 194572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void refreshTestResults() { 195572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams checkAndRunNextTest(); 196572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 197572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 198572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams public void cleanup() { 199572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams stopTesting = true; 200572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams UnitTest t = activeTest; 201572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 202572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* Stop periodic refresh of testing */ 203572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (mTimer != null) { 204572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.cancel(); 205572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer.purge(); 206572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams mTimer = null; 207572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 208572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 209572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams /* Wait to exit until we finish the current test */ 210572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams if (t != null) { 211572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams try { 212572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams t.join(); 213572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 214572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams catch (InterruptedException e) { 215572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 216572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams t = null; 217572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 218572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 219572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams } 220572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams 221572a5031a5d8602db0bec0b253428a034bd4dd59Jason Sams} 222