示例#1
0
CallTempStruct* getCurrentTempCallStruct(JNIEnv* env) {
	CallTempStructNode* pNode = (CallTempStructNode*)GET_THREAD_LOCAL_DATA();
	if (!pNode || !pNode->fUsed)
		return NULL;

	return &pNode->fCallTempStruct;
}
示例#2
0
void releaseTempCallStruct(JNIEnv* env, CallTempStruct* s) {
	CallTempStructNode* pNode = (CallTempStructNode*)GET_THREAD_LOCAL_DATA();
	if (!pNode || &pNode->fCallTempStruct != s) {
		throwException(env, "Invalid thread-local status : critical bug !");
		return;
	}
	pNode->fUsed = JNI_FALSE;
	if (pNode->fPrevious)
		SET_THREAD_LOCAL_DATA(pNode->fPrevious);
}
示例#3
0
void releaseTempCallStruct(JNIEnv* env, CallTempStruct* s) {
	CallTempStructNode* pNode = (CallTempStructNode*)GET_THREAD_LOCAL_DATA();
	if (!pNode || &pNode->fCallTempStruct != s) {
		throwException(env, "Invalid thread-local status : critical bug !");
		return;
	}
	pNode->fUsed = JNI_FALSE;
	if (s->localRefsToCleanup.buffer) {
		free(s->localRefsToCleanup.buffer);
		s->localRefsToCleanup.buffer = NULL;
		s->localRefsToCleanup.bufferLength = 0;
		s->localRefsToCleanup.length = 0;
	}
	if (pNode->fPrevious)
		SET_THREAD_LOCAL_DATA(pNode->fPrevious);
}
示例#4
0
CallTempStruct* getTempCallStruct(JNIEnv* env) {
	CallTempStructNode* pNode = (CallTempStructNode*)GET_THREAD_LOCAL_DATA();
	if (!pNode) {
		pNode = NewNode(NULL);
		SET_THREAD_LOCAL_DATA(pNode);
	}

	if (pNode->fUsed) {
		if (!pNode->fNext)
			pNode->fNext = NewNode(pNode);

		pNode = pNode->fNext;
		SET_THREAD_LOCAL_DATA(pNode);
	}
	pNode->fUsed = JNI_TRUE;
	return &pNode->fCallTempStruct;
}
示例#5
0
void freeCurrentThreadLocalData() {
	CallTempStructNode* pNode = (CallTempStructNode*)GET_THREAD_LOCAL_DATA();
	FreeNodes(pNode);
	SET_THREAD_LOCAL_DATA(NULL);
}