1f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 2f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Copyright (C) 2008 The Android Open Source Project 3f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 4f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License"); 5f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * you may not use this file except in compliance with the License. 6f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * You may obtain a copy of the License at 7f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 8f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.apache.org/licenses/LICENSE-2.0 9f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 10f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Unless required by applicable law or agreed to in writing, software 11f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS, 12f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * See the License for the specific language governing permissions and 14f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * limitations under the License. 15f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 16f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 17f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 18f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * java.lang.VMThread 19f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 20f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "Dalvik.h" 21f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project#include "native/InternalNativePriv.h" 22f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 23f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 24f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 25f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * static void create(Thread t, long stacksize) 26f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 27f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * This is eventually called as a result of Thread.start(). 28f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 29f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Throws an exception on failure. 30f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 31f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_create(const u4* args, JValue* pResult) 32f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 33f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* threadObj = (Object*) args[0]; 34f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project s8 stackSize = GET_ARG_LONG(args, 1); 35f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 36e3346d8b2049cefe4d27218b47b6da0cd179cc24Andy McFadden /* copying collector will pin threadObj for us since it was an argument */ 37f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmCreateInterpThread(threadObj, (int) stackSize); 38f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 39f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 40f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 41f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 42f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * static Thread currentThread() 43f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 44f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_currentThread(const u4* args, 45f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue* pResult) 46f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 47f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNUSED_PARAMETER(args); 48f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 49f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_PTR(dvmThreadSelf()->threadObj); 50f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 51f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 52f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 53f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * void getStatus() 54f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 55f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Gets the Thread status. Result is in VM terms, has to be mapped to 56f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Thread.State by interpreted code. 57f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 58f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_getStatus(const u4* args, JValue* pResult) 59f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 60f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* thisPtr = (Object*) args[0]; 61f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread* thread; 62f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int result; 63f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 64f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmLockThreadList(NULL); 65f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread = dvmGetThreadFromThreadObject(thisPtr); 66f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (thread != NULL) 67f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result = thread->status; 68f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 69f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project result = THREAD_ZOMBIE; // assume it used to exist and is now gone 70f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmUnlockThreadList(); 71de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 72f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_INT(result); 73f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 74f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 75f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 76f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * boolean holdsLock(Object object) 77f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 78f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Returns whether the current thread has a monitor lock on the specific 79f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * object. 80f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 81f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_holdsLock(const u4* args, JValue* pResult) 82f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 83f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* thisPtr = (Object*) args[0]; 84f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* object = (Object*) args[1]; 85f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread* thread; 86f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 87f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (object == NULL) { 88a8b4a0eec5e3ab181b3d26223c84c556bead06c8Elliott Hughes dvmThrowNullPointerException("object == null"); 89f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 90f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project } 91f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 92f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmLockThreadList(NULL); 93f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread = dvmGetThreadFromThreadObject(thisPtr); 94f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int result = dvmHoldsLock(thread, object); 95f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmUnlockThreadList(); 96f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 97f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_BOOLEAN(result); 98f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 99f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 100f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 101f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * void interrupt() 102f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 103f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Interrupt a thread that is waiting (or is about to wait) on a monitor. 104f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 105f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_interrupt(const u4* args, JValue* pResult) 106f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 107f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* thisPtr = (Object*) args[0]; 108f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread* thread; 109f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 110f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmLockThreadList(NULL); 111f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread = dvmGetThreadFromThreadObject(thisPtr); 112f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (thread != NULL) 113f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmThreadInterrupt(thread); 114f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmUnlockThreadList(); 115f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 116f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 117f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 118f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 119f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * static boolean interrupted() 120f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 121f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Determine if the current thread has been interrupted. Clears the flag. 122f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 123f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_interrupted(const u4* args, 124f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue* pResult) 125f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 126f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread* self = dvmThreadSelf(); 127f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bool interrupted; 128f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 129f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNUSED_PARAMETER(args); 130f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 131f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project interrupted = self->interrupted; 132f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project self->interrupted = false; 133f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_BOOLEAN(interrupted); 134f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 135f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 136f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 137f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * boolean isInterrupted() 138f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 139f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Determine if the specified thread has been interrupted. Does not clear 140f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * the flag. 141f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 142f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_isInterrupted(const u4* args, 143f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue* pResult) 144f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 145f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* thisPtr = (Object*) args[0]; 146f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread* thread; 147f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project bool interrupted; 148f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 149f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmLockThreadList(NULL); 150f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread = dvmGetThreadFromThreadObject(thisPtr); 151f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (thread != NULL) 152f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project interrupted = thread->interrupted; 153f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project else 154f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project interrupted = false; 155f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmUnlockThreadList(); 156f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 157f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_BOOLEAN(interrupted); 158f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 159f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 160f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 161f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * void nameChanged(String newName) 162f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 163f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The name of the target thread has changed. We may need to alert DDMS. 164f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 165f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_nameChanged(const u4* args, 166f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue* pResult) 167f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 168f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* thisPtr = (Object*) args[0]; 169f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project StringObject* nameStr = (StringObject*) args[1]; 170f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread* thread; 171f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int threadId = -1; 172f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 173f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project /* get the thread's ID */ 174f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmLockThreadList(NULL); 175f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread = dvmGetThreadFromThreadObject(thisPtr); 176f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (thread != NULL) 177f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project threadId = thread->threadId; 178f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmUnlockThreadList(); 179f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 180f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmDdmSendThreadNameChange(threadId, nameStr); 181f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //char* str = dvmCreateCstrFromString(nameStr); 1824308417beec548c2b2c06ecec4f7f4a965b09fb2Steve Block //ALOGI("UPDATE: threadid=%d now '%s'", threadId, str); 183f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //free(str); 184f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 185f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 186f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 187f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 188f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 189f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * void setPriority(int newPriority) 190f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 191f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Alter the priority of the specified thread. "newPriority" will range 192f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * from Thread.MIN_PRIORITY to Thread.MAX_PRIORITY (1-10), with "normal" 193f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * threads at Thread.NORM_PRIORITY (5). 194f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 195f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_setPriority(const u4* args, 196f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project JValue* pResult) 197f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 198f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Object* thisPtr = (Object*) args[0]; 199f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project int newPriority = args[1]; 200f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Thread* thread; 201de75089fb7216d19e9c22cce4dc62a49513477d3Carl Shapiro 202f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmLockThreadList(NULL); 203f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project thread = dvmGetThreadFromThreadObject(thisPtr); 204f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project if (thread != NULL) 205f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmChangeThreadPriority(thread, newPriority); 206f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project //dvmDumpAllThreads(false); 207f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmUnlockThreadList(); 208f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 209f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 210f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 211f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 212f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 213f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * static void sleep(long msec, int nsec) 214f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 215f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_sleep(const u4* args, JValue* pResult) 216f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 217f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project dvmThreadSleep(GET_ARG_LONG(args,0), args[2]); 218f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 219f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 220f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 221f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project/* 222f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * public void yield() 223f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 224f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * Causes the thread to temporarily pause and allow other threads to execute. 225f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * 226f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * The exact behavior is poorly defined. Some discussion here: 227f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project * http://www.cs.umd.edu/~pugh/java/memoryModel/archive/0944.html 228f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project */ 229f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectstatic void Dalvik_java_lang_VMThread_yield(const u4* args, JValue* pResult) 230f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project{ 231f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project UNUSED_PARAMETER(args); 232f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 233f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project sched_yield(); 234f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 235f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project RETURN_VOID(); 236f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project} 237f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project 238f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Projectconst DalvikNativeMethod dvm_java_lang_VMThread[] = { 239f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "create", "(Ljava/lang/Thread;J)V", 240f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_create }, 241f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "currentThread", "()Ljava/lang/Thread;", 242f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_currentThread }, 243f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "getStatus", "()I", 244f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_getStatus }, 245f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "holdsLock", "(Ljava/lang/Object;)Z", 246f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_holdsLock }, 247f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "interrupt", "()V", 248f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_interrupt }, 249f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "interrupted", "()Z", 250f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_interrupted }, 251f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "isInterrupted", "()Z", 252f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_isInterrupted }, 253f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "nameChanged", "(Ljava/lang/String;)V", 254f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_nameChanged }, 255f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "setPriority", "(I)V", 256f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_setPriority }, 257f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "sleep", "(JI)V", 258f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_sleep }, 259f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { "yield", "()V", 260f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project Dalvik_java_lang_VMThread_yield }, 261f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project { NULL, NULL, NULL }, 262f6c387128427e121477c1b32ad35cdcaa5101ba3The Android Open Source Project}; 263