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; }
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); }
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; }
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; }
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; }
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; }
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); }
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; }
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; }