예제 #1
0
파일: utils.c 프로젝트: BerlaT/cgr-jni
PsmPartition getIonPsmPartition(long nodeNum, int partNum)
{
	//cached for optimization
	static jclass psmPartitionManagerClass = 0;
	static jmethodID method = 0;
	JNIEnv * jniEnv = getThreadLocalEnv();
	if (method == 0)
	{
		psmPartitionManagerClass =
				(*jniEnv)->FindClass(jniEnv, PsmPartitionManagerClass);
		method =
				(*jniEnv)->GetStaticMethodID(jniEnv, psmPartitionManagerClass,
						"getPartition","(JI)Lcgr_jni/psm/PsmPartition;");
	}
	jobject partition =
			(*jniEnv)->CallStaticObjectMethod(jniEnv,
					psmPartitionManagerClass, method, (jlong) nodeNum, partNum);
	if (partition == NULL)
	{
		method = (*jniEnv)->GetStaticMethodID(jniEnv,
				psmPartitionManagerClass, "newPartition",
				"(JI)Lcgr_jni/psm/PsmPartition;");
		partition = (*jniEnv)->CallStaticObjectMethod(jniEnv,
				psmPartitionManagerClass, method, (jlong) nodeNum, partNum);
	}
	return (PsmPartition) partition;
}
예제 #2
0
파일: psm.c 프로젝트: michirod/cgr-jni
void Psm_free(const char * s, int n, PsmPartition partition, PsmAddress address)
{
	JNIEnv * jniEnv = getThreadLocalEnv();
	jclass psmPartitionClass = (*jniEnv)->FindClass(jniEnv, PsmPartitionClass);
	jmethodID method = (*jniEnv)->GetMethodID(jniEnv, psmPartitionClass, "psmFree","(J)V");
	(*jniEnv)->CallVoidMethod(jniEnv, partition, method, address);
	free((void *)address);
}
예제 #3
0
파일: psm.c 프로젝트: michirod/cgr-jni
int	Psm_uncatlg(const char * s, int n, PsmPartition partition, char *objName)
{
	JNIEnv * jniEnv = getThreadLocalEnv();
	jclass psmPartitionClass = (*jniEnv)->FindClass(jniEnv, PsmPartitionClass);
	jmethodID uncatlg = (*jniEnv)->GetMethodID(jniEnv, psmPartitionClass, "psmUncatlg","(Ljava/lang/String;)I");
	jstring name = (*jniEnv)->NewStringUTF(jniEnv, objName);
	jint result = (*jniEnv)->CallIntMethod(jniEnv, partition, uncatlg, name);
	return result;
}
예제 #4
0
파일: psm.c 프로젝트: michirod/cgr-jni
int	Psm_catlg(const char * s, int n, PsmPartition partition, char *objName, PsmAddress objLocation)
{
	JNIEnv * jniEnv = getThreadLocalEnv();
	jclass psmPartitionClass = (*jniEnv)->FindClass(jniEnv, PsmPartitionClass);
	//jmethodID catlg = (*jniEnv)->GetMethodID(jniEnv, psmPartitionClass, "psmCatlg","(Ljava/lang/String;Ljni/test/psm/PsmAddress;)I");
	jmethodID catlg = (*jniEnv)->GetMethodID(jniEnv, psmPartitionClass, "psmCatlg","(Ljava/lang/String;J)I");
	jstring name = (*jniEnv)->NewStringUTF(jniEnv, objName);
	jint result = (*jniEnv)->CallIntMethod(jniEnv, partition, catlg, name, (jlong) objLocation);
	return result;
}
예제 #5
0
파일: utils.c 프로젝트: BerlaT/cgr-jni
void destroyIonPartitions()
{
	JNIEnv * jniEnv = getThreadLocalEnv();
	IonPartitions * ionP = getIonPartitions();
	(*jniEnv)->DeleteGlobalRef(jniEnv, ionP->partition[WM_PSM_PARTITION]);
	(*jniEnv)->DeleteGlobalRef(jniEnv, ionP->partition[SDR_PSM_PARTITION]);
	free(ionP);
	pthread_key_delete(ionPartitions_key);
	ionPartitions_key = -1;
}
예제 #6
0
파일: psm.c 프로젝트: michirod/cgr-jni
PsmAddress	Psm_zalloc(const char * s, int n, PsmPartition partition, unsigned long length)
{
	JNIEnv * jniEnv = getThreadLocalEnv();
	void * pointer = (void *) malloc(length);
	jclass psmPartitionClass = (*jniEnv)->FindClass(jniEnv, PsmPartitionClass);
	jmethodID zalloc = (*jniEnv)->GetMethodID(jniEnv, psmPartitionClass, "psmAlloc","(J)J");
	jlong result = (*jniEnv)->CallLongMethod(jniEnv, partition, zalloc, (jlong) pointer);
	if (pointer != (void*)(intptr_t) result)
		return NULL;
	return pointer;
}
예제 #7
0
파일: utils.c 프로젝트: BerlaT/cgr-jni
void eraseIonPsmPartition(long nodeNum, int partNum)
{
	//cached for optimization
	static jclass psmPartitionManagerClass = 0;
	static jmethodID method = 0;
	JNIEnv * jniEnv = getThreadLocalEnv();
	if (method == 0)
	{
		psmPartitionManagerClass =
				(*jniEnv)->FindClass(jniEnv, PsmPartitionManagerClass);
		method = (*jniEnv)->GetStaticMethodID(jniEnv,
				psmPartitionManagerClass, "erasePartition","(JI)V");
	}
	(*jniEnv)->CallStaticVoidMethod(jniEnv, psmPartitionManagerClass,
			method, (jlong) nodeNum, partNum);
}
예제 #8
0
파일: psm.c 프로젝트: michirod/cgr-jni
int	psm_locate(PsmPartition partition , char *objName,	PsmAddress *objLocation, PsmAddress *entryElt)
{
	JNIEnv * jniEnv = getThreadLocalEnv();
	jclass psmPartitionClass = (*jniEnv)->FindClass(jniEnv, PsmPartitionClass);
	jstring name = (*jniEnv)->NewStringUTF(jniEnv, objName);
	//jclass psmAddressClass = (*jniEnv)->FindClass(jniEnv, PsmAddressClass);
	//jmethodID constructor = (*jniEnv)->GetMethodID(jniEnv, psmAddressClass, "<init>","()V");
	//*objLocation = (*jniEnv)->NewObject(jniEnv, psmAddressClass, constructor);
	//*entryElt = (*jniEnv)->NewObject(jniEnv, psmAddressClass, constructor);
	//jmethodID locate = (*jniEnv)->GetMethodID(jniEnv, psmPartitionClass, "psmLocate","(Ljava/lang/String;Ljni/test/psm/PsmAddress;Ljni/test/psm/PsmAddress;)I");
	//jint result = (*jniEnv)->CallIntMethod(jniEnv, partition, locate, name, *objLocation, *entryElt);
	jmethodID locate = (*jniEnv)->GetMethodID(jniEnv, psmPartitionClass, "psmLocate","(Ljava/lang/String;)J");
	jlong result = (*jniEnv)->CallLongMethod(jniEnv, partition, locate, name);
	if (result < 0)
	{
		*entryElt = 0;
		return 0;
	}
	*objLocation = (PsmAddress) result;
	*entryElt = (PsmAddress) result;
	return 0;
}
예제 #9
0
파일: utils.c 프로젝트: BerlaT/cgr-jni
static IonPartitions * updateIonPartitions()
{
	JNIEnv * jniEnv = getThreadLocalEnv();
	IonPartitions * ionP = getIonPartitions();
	if (ionP == NULL)
	{
		putErrmsg("Cannot retrieve ion partitions", NULL);
		return NULL;
	}
	if (ionP->nodeNbr != getNodeNum())
	{
		ionP->nodeNbr = getNodeNum();
		(*jniEnv)->DeleteGlobalRef(jniEnv, ionP->partition[WM_PSM_PARTITION]);
		(*jniEnv)->DeleteGlobalRef(jniEnv, ionP->partition[SDR_PSM_PARTITION]);
		ionP->partition[WM_PSM_PARTITION] =
				(*jniEnv)->NewGlobalRef(jniEnv,
				getIonPsmPartition((jlong) ionP->nodeNbr, WM_PSM_PARTITION));
		ionP->partition[SDR_PSM_PARTITION] =
				(*jniEnv)->NewGlobalRef(jniEnv,
				getIonPsmPartition((jlong) ionP->nodeNbr, SDR_PSM_PARTITION));
		setIonPartitions(ionP);
	}
	return ionP;
}