X-Git-Url: http://info.iut-bm.univ-fcomte.fr/pub/gitweb/simgrid.git/blobdiff_plain/3913bb7b7d28a6c8f383b7973f72a4fc7a1f4f01..0f5e8daaa6e9f74521068aa75837200bcd182ea6:/src/java/jmsg_process.c diff --git a/src/java/jmsg_process.c b/src/java/jmsg_process.c index f4abf5873f..6ebb133fc8 100644 --- a/src/java/jmsg_process.c +++ b/src/java/jmsg_process.c @@ -1,176 +1,216 @@ -/* - * $Id$ - * - * Copyright 2006,2007 Martin Quinson, Malek Cherier All right reserved. - * - * This program is free software; you can redistribute it and/or modify it - * under the terms of the license (GNU LGPL) which comes with this package. - * - * This contains the implementation of the functions in relation with the java - * process instance. - */ - -#include "jmsg.h" +/* Functions related to the java process instances. */ + +/* Copyright (c) 2007, 2008, 2009, 2010. The SimGrid Team. + * All rights reserved. */ + +/* This program is free software; you can redistribute it and/or modify it + * under the terms of the license (GNU LGPL) which comes with this package. */ + #include "jmsg_process.h" +#include "jmsg.h" #include "jxbt_utilities.h" -XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg); +#include "simix/smx_context_java.h" +XBT_LOG_EXTERNAL_DEFAULT_CATEGORY(jmsg); -jobject -jprocess_new_global_ref(jobject jprocess,JNIEnv* env) { - return (*env)->NewGlobalRef(env,jprocess); +jobject jprocess_new_global_ref(jobject jprocess, JNIEnv * env) +{ + return (*env)->NewGlobalRef(env, jprocess); } -void -jprocess_delete_global_ref(jobject jprocess,JNIEnv* env) { - (*env)->DeleteGlobalRef(env,jprocess); +void jprocess_delete_global_ref(jobject jprocess, JNIEnv * env) +{ + (*env)->DeleteGlobalRef(env, jprocess); } -jboolean -jprocess_is_alive(jobject jprocess,JNIEnv* env) { - jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","isAlive", "()Z"); - - if(!id) +jboolean jprocess_is_alive(jobject jprocess, JNIEnv * env) +{ + jmethodID id = + jxbt_get_smethod(env, "simgrid/msg/Process", "isAlive", "()Z"); + + if (!id) return 0; - return (*env)->CallBooleanMethod(env,jprocess,id); + return (*env)->CallBooleanMethod(env, jprocess, id); } -void -jprocess_join(jobject jprocess,JNIEnv* env) { - jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","join", "()V"); - - if(!id) +void jprocess_join(jobject jprocess, JNIEnv * env) +{ + jmethodID id = + jxbt_get_smethod(env, "simgrid/msg/Process", "join", "()V"); + + if (!id) return; - - (*env)->CallVoidMethod(env,jprocess, id); + + (*env)->CallVoidMethod(env, jprocess, id); } -void -jprocess_exit(jobject jprocess,JNIEnv* env) { - jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","interrupt", "()V"); - - if(!id) +void jprocess_exit(jobject jprocess, JNIEnv * env) +{ + jmethodID id = + jxbt_get_smethod(env, "simgrid/msg/Process", "interrupt", "()V"); + + if (!id) return; - - (*env)->CallVoidMethod(env,jprocess, id); + + (*env)->CallVoidMethod(env, jprocess, id); } -void -jprocess_yield(jobject jprocess,JNIEnv* env) { - jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","switchProcess", "()V"); - - if(!id) +void jprocess_yield(jobject jprocess, JNIEnv * env) +{ + jmethodID id = + jxbt_get_smethod(env, "simgrid/msg/Process", "switchProcess", "()V"); + + if (!id) return; - - (*env)->CallVoidMethod(env,jprocess,id); + + (*env)->CallVoidMethod(env, jprocess, id); } -void -jprocess_lock_mutex(jobject jprocess,JNIEnv* env) { - jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","lockMutex", "()V"); - - if(!id) +void jprocess_lock_mutex(jobject jprocess, JNIEnv * env) +{ + jmethodID id = + jxbt_get_smethod(env, "simgrid/msg/Process", "lockMutex", "()V"); + + if (!id) return; - - (*env)->CallVoidMethod(env,jprocess,id); + + (*env)->CallVoidMethod(env, jprocess, id); } -void -jprocess_unlock_mutex(jobject jprocess,JNIEnv* env) { - jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","unlockMutex", "()V"); - - if(!id) +void jprocess_unlock_mutex(jobject jprocess, JNIEnv * env) +{ + jmethodID id = + jxbt_get_smethod(env, "simgrid/msg/Process", "unlockMutex", "()V"); + + if (!id) return; - (*env)->CallVoidMethod(env,jprocess,id); + (*env)->CallVoidMethod(env, jprocess, id); } -void -jprocess_signal_cond(jobject jprocess,JNIEnv* env) { - jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","signalCond", "()V"); - - if(!id) +void jprocess_signal_cond(jobject jprocess, JNIEnv * env) +{ + jmethodID id = + jxbt_get_smethod(env, "simgrid/msg/Process", "signalCond", "()V"); + + if (!id) return; - (*env)->CallVoidMethod(env,jprocess,id); + (*env)->CallVoidMethod(env, jprocess, id); } -void -jprocess_wait_cond(jobject jprocess,JNIEnv* env) { - jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","waitCond", "()V"); - - if(!id) +void jprocess_wait_cond(jobject jprocess, JNIEnv * env) +{ + jmethodID id = + jxbt_get_smethod(env, "simgrid/msg/Process", "waitCond", "()V"); + + if (!id) return; - (*env)->CallVoidMethod(env,jprocess,id); + (*env)->CallVoidMethod(env, jprocess, id); } -void -jprocess_start(jobject jprocess,JNIEnv* env) { - jmethodID id = jxbt_get_smethod(env,"simgrid/msg/Process","start", "()V"); - - if(!id) +void jprocess_start(jobject jprocess, JNIEnv * env) +{ + jmethodID id = + jxbt_get_smethod(env, "simgrid/msg/Process", "start", "()V"); + + if (!id) return; - DEBUG2("jprocess_start(jproc=%p,env=%p)",jprocess,env); - (*env)->CallVoidMethod(env,jprocess,id); + DEBUG2("jprocess_start(jproc=%p,env=%p)", jprocess, env); + (*env)->CallVoidMethod(env, jprocess, id); DEBUG0("jprocess started"); } -m_process_t -jprocess_to_native_process(jobject jprocess,JNIEnv* env) { - jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J"); - - if(!id) +m_process_t jprocess_to_native_process(jobject jprocess, JNIEnv * env) +{ + jfieldID id = jxbt_get_sfield(env, "simgrid/msg/Process", "bind", "J"); + + if (!id) return NULL; - return (m_process_t)(long)(*env)->GetLongField(env,jprocess,id); + return (m_process_t) (long) (*env)->GetLongField(env, jprocess, id); } -void -jprocess_bind(jobject jprocess,m_process_t process,JNIEnv* env) { - jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J"); - - if(!id) +void jprocess_bind(jobject jprocess, m_process_t process, JNIEnv * env) +{ + jfieldID id = jxbt_get_sfield(env, "simgrid/msg/Process", "bind", "J"); + + if (!id) return; - (*env)->SetLongField(env,jprocess,id,(jlong)(long)(process)); + (*env)->SetLongField(env, jprocess, id, (jlong) (long) (process)); } -jlong -jprocess_get_id(jobject jprocess,JNIEnv* env) { - jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","id", "J"); - - if(!id) +jlong jprocess_get_id(jobject jprocess, JNIEnv * env) +{ + jfieldID id = jxbt_get_sfield(env, "simgrid/msg/Process", "id", "J"); + + if (!id) return 0; - return (*env)->GetLongField(env,jprocess,id); + return (*env)->GetLongField(env, jprocess, id); } -jstring -jprocess_get_name(jobject jprocess,JNIEnv* env) { - jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","name", "Ljava/lang/String;"); +jstring jprocess_get_name(jobject jprocess, JNIEnv * env) +{ + jfieldID id = jxbt_get_sfield(env, "simgrid/msg/Process", "name", + "Ljava/lang/String;"); jobject jname; - - if(!id) + + if (!id) return NULL; - - jname = (jstring)(*env)->GetObjectField(env,jprocess,id); - return (*env)->NewGlobalRef(env,jname); - + jname = (jstring) (*env)->GetObjectField(env, jprocess, id); + + return (*env)->NewGlobalRef(env, jname); + } -jboolean -jprocess_is_valid(jobject jprocess,JNIEnv* env) { - jfieldID id = jxbt_get_sfield(env,"simgrid/msg/Process","bind", "J"); - - if(!id) +jboolean jprocess_is_valid(jobject jprocess, JNIEnv * env) +{ + jfieldID id = jxbt_get_sfield(env, "simgrid/msg/Process", "bind", "J"); + + if (!id) return JNI_FALSE; - return (*env)->GetLongField(env,jprocess,id) ? JNI_TRUE : JNI_FALSE; + return (*env)->GetLongField(env, jprocess, id) ? JNI_TRUE : JNI_FALSE; +} + +void jprocess_schedule(smx_context_t context) +{ + JNIEnv *env; + jmethodID id; + + env = get_current_thread_env(); + + id = jxbt_get_smethod(env, "simgrid/msg/Process", "schedule", "()V"); + + if (!id) + return; + + (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id); +} + + + +void jprocess_unschedule(smx_context_t context) +{ + JNIEnv *env; + jmethodID id; + + env = get_current_thread_env(); + + + id = jxbt_get_smethod(env, "simgrid/msg/Process", "unschedule", "()V"); + + if (!id) + return; + + (*env)->CallVoidMethod(env, ((smx_ctx_java_t) context)->jprocess, id); }