Пример #1
0
void fm::initMainThread() {
	// daemon thread를 만든다.
	java_lang_ThreadGroup_C$* pThreadGroupClass = java_lang_ThreadGroup_C$::importClass$();
	kernelData.g_pMainThread = FASTIVA_NEW(java_lang_Thread)(pThreadGroupClass->g_mMain, fastiva.createAsciiStringA("main", 4), java_lang_Thread__NORM_PRIORITY, true);


#if JPP_JDK_VERSION > JPP_JDK_CDC
	kernelData.g_pMainThread->set__contextClassLoader(java_lang_ClassLoader_C$::importClass$()->getSystemClassLoader());

#if FASTIVA_NULL_ADDR != 0
	// v3 그룹이 null이어도 문제가 없는가?
	pThread->set__inheritedAccessControlContext((java_security_AccessControlContext_p)FASTIVA_NULL);
	pThread->set__target((java_lang_Runnable_p)FASTIVA_NULL);
#endif
#if !JPP_JDK_IS_ANDROID()
	pThread->set__lock(FASTIVA_NEW(java_lang_Object)());
#endif

#if 0 // Z-TEMP 2007.09 #ifndef FASTIVA_J142
	//*
	pThread->set__threadLocals(java_util_Collections_C$::importClass$()->g_EMPTY_MAP);
	pThread->set__inheritableThreadLocals(java_util_Collections_C$::importClass$()->g_EMPTY_MAP);
	/*/
	pThread->set__threadLocals((java_lang_ThreadLocal$ThreadLocalMap*)FASTIVA_NULL);
	pThread->set__inheritableThreadLocals((java_lang_ThreadLocal$ThreadLocalMap*)FASTIVA_NULL);
	//*/
#endif
#endif

	// running 중인 Java-Thread 만이 GlockLocking 되어야 한다.
	// 현 Thread가 속한 ThreadGroup도 항상 Reachable 상태가 된다.
	//pThreadGroup->add(pThread);
	fm::attachThread(kernelData.g_pMainThread, fastiva_getCurrentTask());

	// system이란 이름을 가진 thread-group이 생성된다.
	//java_lang_ThreadGroup_C$* pThreadGroupClass = java_lang_ThreadGroup_C$::importClass$();
	kernelData.g_pMainThread->m_group = pThreadGroupClass->g_mMain;
	//fastiva_lockGlobalRef(pThreadGroup);
}
Пример #2
0
void fox_GC_doLocalGC(); //_impl(fastiva_Task* pCurrTask, bool isLocal);

void FOX_FASTCALL(fox_task_notifyCurrentTaskBlocked)(fox_Task* pTask0) {
}

void fastiva_Runtime::enterNativeSection_$$(
) {
#if 0
	_asm {
		mov [ecx+0], ebx
		mov [ecx+4], ebp;
		mov [ecx+8], esi;
		mov [ecx+12], edi;
	}
#endif
	fastiva_Task* pCurrTask = fastiva_getCurrentTask();
	if (pCurrTask == ADDR_ZERO) {
		return;
	}
	fastiva_StackContext* pStackContext = pCurrTask->m_pStackContext;
	KASSERT(pStackContext != ADDR_ZERO);
	fox_jmp_buf buf;
	if (!_setjmp(buf)) { // <- 단지 register 저장용으로 setjmp 를 호출.
		pStackContext->m_pStack = &buf;
	}
	else {
		// 혹시 몰라 일부러 넣은 stub code;
		fox_printf("somthing wrong with _setjmp%x", pCurrTask);
	}
}