void Java_java_lang_Thread_internalSetPriority(Env* env, Class* cls, JavaThread* threadObj, jint priority) { rvmLockThreadsList(); Thread* thread = (Thread*) LONG_TO_PTR(threadObj->threadPtr); if (thread) { rvmChangeThreadPriority(env, thread, priority); } rvmUnlockThreadsList(); }
static void* startThreadEntryPoint(void* _args) { ThreadEntryPointArgs* args = (ThreadEntryPointArgs*) _args; Env* env = args->env; Thread* thread = args->thread; JavaThread* threadObj = args->threadObj; rvmLockThreadsList(); jboolean failure = TRUE; setThreadEnv(env); if (!rvmExceptionOccurred(env)) { if (initThread(env, thread, threadObj)) { if (rvmSetupSignals(env)) { failure = FALSE; thread->stackAddr = getStackAddress(); } } } thread->status = THREAD_STARTING; pthread_cond_broadcast(&threadStartCond); while (thread->status != THREAD_VMWAIT) { pthread_cond_wait(&threadStartCond, &threadsLock); } rvmUnlockThreadsList(); if (!failure) { rvmChangeThreadStatus(env, thread, THREAD_RUNNING); rvmChangeThreadPriority(env, thread, thread->threadObj->priority); Method* run = rvmGetInstanceMethod2(env, java_lang_Thread, "run", "()V"); if (run) { jvalue emptyArgs[0]; rvmCallVoidInstanceMethodA(env, (Object*) threadObj, run, emptyArgs); } } detachThread(env, TRUE); return NULL; }