📄 jump_os_impl.c
字号:
r = jumpMessageWaitFor((JUMPPlatformCString)type, (int32)timeout, &code); if (r == NULL) { switch (code) { case JUMP_OUT_OF_MEMORY: JNU_ThrowOutOfMemoryError(env, "in jumpMessageWaitFor"); break; case JUMP_TIMEOUT: throw_by_name(env, "com/sun/jump/message/JUMPTimedOutException"); break; case JUMP_UNBLOCKED: throw_by_name(env, "com/sun/jump/message/JUMPUnblockedException"); break; case JUMP_NO_SUCH_QUEUE: // The design of the Java code should not allow this. // Fall through to default. default: throw_IOException(env, code); break; } goto out; } retVal = new_byte_array_from_message(env, r); if (retVal == NULL) { /* Exception already thrown. */ goto out; } out: if (r != NULL) { jumpMessageFree(r); } return retVal;}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_sendMessageAsync( JNIEnv *env, jobject thisObj, jint pid, jbyteArray messageBytes, jboolean isResponse){ JUMPOutgoingMessage m = NULL; JUMPAddress target; JUMPMessageStatusCode code; ensureInitialized(); m = new_outgoing_message_from_byte_array(env, messageBytes, isResponse); if (m == NULL) { /* Exception already thrown. */ goto out; } target.processId = pid; jumpMessageSendAsync(target, m, &code); switch (code) { case JUMP_SUCCESS: break; case JUMP_OUT_OF_MEMORY: JNU_ThrowOutOfMemoryError(env, "in jumpMessageSendSync"); break; case JUMP_TARGET_NONEXISTENT: throw_with_messagetype( env, "com/sun/jump/message/JUMPTargetNonexistentException", jumpMessageGetType(m)); break; case JUMP_WOULD_BLOCK: throw_with_messagetype( env, "com/sun/jump/message/JUMPWouldBlockException", jumpMessageGetType(m)); break; default: throw_IOException(env, code); break; } out: if (m != NULL) { jumpMessageFreeOutgoing(m); }}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_sendMessageResponse( JNIEnv *env, jobject thisObj, jbyteArray messageBytes, jboolean isResponse){ JUMPOutgoingMessage m = NULL; JUMPMessageStatusCode code; ensureInitialized(); m = new_outgoing_message_from_byte_array(env, messageBytes, isResponse); if (m == NULL) { /* Exception already thrown. */ goto out; } jumpMessageSendAsyncResponse(m, &code); switch (code) { case JUMP_SUCCESS: break; case JUMP_OUT_OF_MEMORY: JNU_ThrowOutOfMemoryError(env, "in jumpMessageSendSync"); break; case JUMP_TARGET_NONEXISTENT: throw_with_messagetype( env, "com/sun/jump/message/JUMPTargetNonexistentException", jumpMessageGetType(m)); break; case JUMP_WOULD_BLOCK: throw_with_messagetype( env, "com/sun/jump/message/JUMPWouldBlockException", jumpMessageGetType(m)); break; default: throw_IOException(env, code); break; } out: if (m != NULL) { jumpMessageFreeOutgoing(m); }}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_reserve( JNIEnv *env, jobject thisObj, jstring messageType){ const char* type; JUMPMessageQueueStatusCode mqcode; type = (*env)->GetStringUTFChars(env, messageType, NULL); if (type == NULL) { return; } /* FIXME: use jumpMessageRegisterDirect. */ jumpMessageQueueCreate((JUMPPlatformCString)type, &mqcode); switch (mqcode) { case JUMP_MQ_SUCCESS: break; case JUMP_MQ_OUT_OF_MEMORY: JNU_ThrowOutOfMemoryError(env, "in jumpMessageQueueCreate"); break; default: throw_IOException(env, JUMP_FAILURE); break; } (*env)->ReleaseStringUTFChars(env, messageType, type);}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_unreserve( JNIEnv *env, jobject thisObj, jstring messageType){ const char* type; type = (*env)->GetStringUTFChars(env, messageType, NULL); if (type == NULL) { return; } /* FIXME: use jumpMessageCancelRegistration. */ jumpMessageQueueDestroy((JUMPPlatformCString)type); (*env)->ReleaseStringUTFChars(env, messageType, type);}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPMessageQueueInterfaceImpl_unblock( JNIEnv *env, jobject thisObj, jstring messageType){ const char* type; JUMPMessageStatusCode code; type = (*env)->GetStringUTFChars(env, messageType, NULL); if (type == NULL) { return; } jumpMessageUnblock((JUMPPlatformCString)type, &code); switch (code) { case JUMP_SUCCESS: break; case JUMP_NO_SUCH_QUEUE: // The design of the Java code should not allow this. // Fall through to default. default: throw_IOException(env, code); break; } (*env)->ReleaseStringUTFChars(env, messageType, type);}static intcreate_process( JNIEnv *env, jobject thisObj, jobjectArray arguments, int isNative){ int argc; char** argv; int i; int retVal; jboolean isCopy; if (arguments == NULL) { argc = 0; argv = NULL; } else { argc = (*env)->GetArrayLength(env, arguments); argv = calloc(argc, sizeof(char*)); if (argv == NULL) { return -1; } for (i = 0; i < argc; i++) { jobject argObj = (*env)->GetObjectArrayElement(env, arguments, i); char* arg = (char*)(*env)->GetStringUTFChars(env, argObj, &isCopy); argv[i] = arg; } } if (isNative) { retVal = jumpProcessNativeCreate(argc, argv); } else { retVal = jumpProcessCreate(argc, argv); } if (argv != NULL) { if (isCopy) { for (i = 0; i < argc; i++) { free(argv[i]); } } free(argv); } return retVal;}JNIEXPORT int JNICALLJava_com_sun_jumpimpl_os_JUMPOSInterfaceImpl_createProcess( JNIEnv *env, jobject thisObj, jobjectArray arguments){ return create_process(env, thisObj, arguments, 0);}JNIEXPORT int JNICALLJava_com_sun_jumpimpl_os_JUMPOSInterfaceImpl_createProcessNative( JNIEnv *env, jobject thisObj, jobjectArray arguments){ return create_process(env, thisObj, arguments, 1);}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPOSInterfaceImpl_setTestingMode( JNIEnv *env, jobject thisObj, jstring filePrefix){ JUMPPlatformCString type = "mvm/server"; JUMPOutgoingMessage outMessage; JUMPAddress targetAddress; JUMPMessageStatusCode code; jboolean isCopy = JNI_FALSE; char *filePrefixStr; filePrefixStr = (*env)->GetStringUTFChars(env, filePrefix, &isCopy); outMessage = jumpMessageNewOutgoingByType(type, &code); jumpMessageAddInt(outMessage, 2); jumpMessageAddString(outMessage, "TESTING_MODE"); jumpMessageAddString(outMessage, filePrefixStr); targetAddress.processId = jumpProcessGetServerPid();#define TIMEOUT 10000 jumpMessageSendSync(targetAddress, outMessage, TIMEOUT, &code); (*env)->ReleaseStringUTFChars(env, filePrefix, filePrefixStr);}JNIEXPORT void JNICALLJava_com_sun_jumpimpl_os_JUMPOSInterfaceImpl_shutdownServer( JNIEnv *env, jobject thisObj){ JUMPPlatformCString type = "mvm/server"; JUMPOutgoingMessage outMessage; JUMPAddress targetAddress; JUMPMessageStatusCode code; outMessage = jumpMessageNewOutgoingByType(type, &code); jumpMessageAddInt(outMessage, 1); jumpMessageAddString(outMessage, "JEXIT"); jumpMessageQueueCleanQueuesOf(jumpProcessGetExecutiveId()); targetAddress.processId = jumpProcessGetServerPid(); #define TIMEOUT 10000 jumpMessageSendSync(targetAddress, outMessage, TIMEOUT, &code);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -