#include <locale.h>
#include "smx_context_java.h"
+#include "smx_context_cojava.h"
#include "jmsg_process.h"
XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg);
-static JavaVM *__java_vm = NULL;
-
+JavaVM *__java_vm = NULL;
JavaVM *get_java_VM(void)
{
(*__java_vm)->AttachCurrentThread(__java_vm, (void **) &env, NULL);
return env;
}
+
+void jmsg_throw_status(JNIEnv *env, MSG_error_t status) {
+ switch (status) {
+ case MSG_TIMEOUT:
+ jxbt_throw_time_out_failure(env,NULL);
+ break;
+ case MSG_TRANSFER_FAILURE:
+ jxbt_throw_transfer_failure(env,NULL);
+ break;
+ case MSG_HOST_FAILURE:
+ jxbt_throw_host_failure(env,NULL);
+ break;
+ default:
+ jxbt_throw_native(env,bprintf("communication failed"));
+ }
+}
+
+
/***************************************************************************************
* Unsortable functions *
***************************************************************************************/
jstring jval;
const char *tmp;
- smx_factory_initializer_to_use = SIMIX_ctx_java_factory_init;
+ (*env)->GetJavaVM(env, &__java_vm);
+
+ if ((*env)->FindClass(env, "java/dyn/Coroutine")) {
+ XBT_VERB("Using Coroutines");
+ smx_factory_initializer_to_use = SIMIX_ctx_cojava_factory_init;
+ }
+ else {
+ XBT_VERB("Using java threads");
+ smx_factory_initializer_to_use = SIMIX_ctx_java_factory_init;
+ }
+ jthrowable exc = (*env)->ExceptionOccurred(env);
+ if (exc) {
+ (*env)->ExceptionClear(env);
+ }
setlocale(LC_NUMERIC,"C");
free(argv[index]);
free(argv);
-
- (*env)->GetJavaVM(env, &__java_vm);
}
JNIEXPORT void JNICALL
(*env)->ReleaseStringUTFChars(env, jplatformFile, platformFile);
}
-
+JNIEXPORT void JNICALL
+Java_org_simgrid_msg_Msg_debug(JNIEnv * env, jclass cls, jstring js)
+{
+ const char *s = (*env)->GetStringUTFChars(env, js, 0);
+ XBT_DEBUG("%s", s);
+ (*env)->ReleaseStringUTFChars(env, js, s);
+}
JNIEXPORT void JNICALL
Java_org_simgrid_msg_Msg_info(JNIEnv * env, jclass cls, jstring js)
{
/* sets the PID and the PPID of the process */
(*env)->SetIntField(env, jprocess, jprocess_field_Process_pid,(jint) MSG_process_get_PID(process));
(*env)->SetIntField(env, jprocess, jprocess_field_Process_ppid, (jint) MSG_process_get_PPID(process));
-
jprocess_bind(jprocess, process, env);
return 0;